【问题标题】:Spark-redis: dataframe writing times too slowSpark-redis:数据帧写入时间太慢
【发布时间】:2019-06-17 16:40:56
【问题描述】:

我是 Apache Spark/Redis 用户,最近我为一个项目尝试了spark-redis。该程序正在生成大约 300 万行的 PySpark 数据帧,我正在使用命令将其写入 Redis 数据库

df.write \
  .format("org.apache.spark.sql.redis") \
  .option("table", "person") \
  .option("key.column", "name") \
  .save()

正如GitHub project dataframe page 所建议的那样。

但是,对于相同的 Spark 集群配置(相同数量的 EC2 实例和实例类型),我的写入时间不一致。有时它发生得很快,有时又太慢。有什么方法可以加快这个过程并获得一致的写入时间?我想知道当里面已经有很多键时它是否会慢慢发生,但对于哈希表来说应该不是问题,不是吗?

【问题讨论】:

    标签: apache-spark dataframe redis pyspark spark-redis


    【解决方案1】:

    这可能是您的分区策略有问题。

    在写入之前检查“df”的分区数,看看分区数和执行时间之间是否存在关系。

    如果是这样,使用合适的分区策略对“df”进行分区(重新分区到固定数量的分区或根据列值重新分区)应该可以解决问题。

    希望这会有所帮助。

    【讨论】:

    • 谢谢,我会测试重新分区策略并通知你结果。
    • 显然分区数和写入次数没有关系。我试图将隔板加倍或将它们切成两半并得到相同的时间。但是写入时间与已保存到数据库中的键数之间存在关系。当数据库为空时,它非常快,随着数据库被填满,它会变得越来越慢。
    • 由于 Redis 是一种内存数据结构存储,因此在写入时您可能会显着丢失物理内存。低内存会导致低性能。你能描述一下你的设置的性质吗?是单节点吗?
    • 它是一个 ElastiCache Clustered Redis,有 2 个 r4.xlarge 节点。注册了 200 万个键时,它不应该遭受内存问题,这与其总容量相去甚远。使用 0 个键,我可以在 3 分钟内编写一个 200 万行的数据帧。使用 200 万个键,写入相同的数据帧需要 50 分钟。这似乎不是预期的行为。
    猜你喜欢
    • 2021-11-08
    • 2018-12-10
    • 2016-08-27
    • 2018-08-13
    • 2018-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多