Запись Spark-Redis теряет строки при записи большого DataFrame в RedisPython

Программы на Python
Ответить
Anonymous
 Запись Spark-Redis теряет строки при записи большого DataFrame в Redis

Сообщение Anonymous »

Я испытываю потерю данных при записи большого DataFrame в Redis с помощью соединителя Spark-Redis.
Подробнее:
  • У меня есть DataFrame с миллионами строк.
  • Запись в Redis работает правильно для небольших DataFrame, но когда DataFrame большой, некоторые после записи строки кажутся пропущенными.
Наблюдения:
  • Обратное чтение из Redis через соединитель Spark-Redis возвращает меньше строк, чем исходный DataFrame.
  • Чтение напрямую по ключу или с помощью scan_iter также возвращает меньше строк. записи.
  • В DataFrame нет повторяющихся строк.
  • Эта проблема возникает только с большими наборами данных; небольшие наборы данных записываются правильно.
Вопрос:
  • Почему Spark-Redis удаляет строки при записи больших DataFrames?
  • Существуют ли какие-либо рекомендуемые настройки, конфигурации или подходы для надежной записи больших наборов данных в Redis с помощью Spark-Redis?
Пример кода
# Prepare Redis key column
df_to_redis = df.withColumn("key", F.concat(F.lit("{"), F.col("uid"), F.lit("}"))).select("key", "lang")

# Write to Redis
df_to_redis.write.format("org.apache.spark.sql.redis") \
.option("table", "info") \
.option("key.column", "key")
.option("host", "REDIS_HOST") \
.option("port", 6379) \
.option("dbNum", 0) \
.mode("append") \
.save()

# Reading back from Redis using Spark-Redis
df_redis = spark.read.format("org.apache.spark.sql.redis") \
.option("table", "info") \
.option("host", "REDIS_HOST") \
.option("port", 6379) \
.option("dbNum", 0) \
.load()

# Reading all keys directly from Redis using redis-py keys()
r = redis.Redis(host="REDIS_HOST", port=6379, db=0)
all_keys = r.keys("info:*")
print(f"Number of keys read via keys(): {len(all_keys)}")

# Reading all keys from Redis using scan_iter()
r = redis.Redis(host="REDIS_HOST", port=6379, db=0)
keys = list(r.scan_iter("info:*"))
print(f"Number of keys read via scan_iter: {len(keys)}")
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»