首页 > 解决方案 > 将 pyspark 数据帧转换为 JSON 时的性能问题

问题描述

我想以有效的方式将 pyspark 数据框内容插入 Redis。尝试了几种方法,但都没有给出预期的结果。

  1. 将 df 转换为 json 需要 30 秒。目标是将 json 有效负载设置到 Redis 集群中以供使用。

  2. 我也在尝试利用 spark-redis https://github.com/RedisLabs/spark-redis/blob/master/doc/python.md库将结果插入到 Redis 中,以便将结果插入到所有工作节点的 Redis,看看它是否有很大的不同。即使这个过程也需要相同的时间才能将结果插入 Redis

我正在寻找有关如何清除瓶颈的专家建议,看看我是否可以将其缩短到不到 5 秒,谢谢。

我正在使用具有 1+4 个节点的 EMR 集群,每个节点有 16 个内核和 64 Gigs 内存。

js = json.dumps(df.toJSON().collect()) #takes 29 seconds
redis.set(key1, js) #takes 1 second

df.write.format("org.apache.spark.sql.redis").option("table", key1).mode('append').save()   #takes 28 seconds

将 df 转换为 json 的前两行代码需要 29 秒,设置为 redis 需要 1 秒。

或者

最后一行代码使用工作节点将 df 内容直接插入 Redis,但需要大约 28 秒。

标签: pysparkapache-spark-sqlpyspark-sqlamazon-emrspark-redis

解决方案


推荐阅读