apache-spark - 将数据存储到 PySpark(Azure - DataBricks)中的数据库非常慢

标签 apache-spark machine-learning pyspark apache-spark-sql databricks

我正在处理大约有 60 亿条记录的大数据集,我已经成功执行了所有计算/操作。最后,当我使用下面的命令将数据存储到 databricks(DBFS) 数据库时,它需要更长的时间(超过 25-30 小时),即使它也没有完成。有人可以给我一些处理如此庞大数据的好方法吗?

df_matches_ml_target.write.mode("overwrite").saveAsTable("Demand_Supply_Match_ML")

如果您需要更多相关信息,请告诉我。

最佳答案

听起来到目前为止,正如 Bi Rico 上面指出的那样,您一直在对数据集执行“惰性”操作。这是 detailed summary 延迟执行的含义。

本质上,您对数据集所做的任何转换(例如 map 、flatMap、过滤器等)在调用操作之前都不会执行。操作执行需要使用结果的操作,一些示例包括写入文件(saveAsTable)、count()、take() 等。

由于您有 60 亿条未知大小的记录,听起来您的数据集相当大,这可能是执行操作需要这么长时间的一个重要因素。

将 Spark 与大数据结合使用时,一般建议是处理较小的数据子集。这使您可以检查转换和代码的有效性,并在合理的时间内获得结果。然后您可以将您的工作应用到整个数据集。

2018 年 9 月 21 日编辑:加快处理时间的建议

如果没有更多信息,很难说,但这里有一些一般性提示。

  • 避免导致随机播放的命令(例如 groupByKey)。混洗将所有数据重新分配到各自的分区,然后再合并它们。这会导致大量网络 I/O。
  • 尝试对数据进行正确分区。这将最大限度地并行处理数据
  • 向集群添加更多节点和/或增加节点的大小(CPU/内存)。这不是一门精确的科学。更多的节点可以一起帮助分区。仅当资源受限时才增加节点的大小。

关于apache-spark - 将数据存储到 PySpark(Azure - DataBricks)中的数据库非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52403848/

相关文章:

apache-spark - Spark 结构化流与 kafka 导致只有一个批处理(Pyspark)

r - 使用聚类分配矩阵为数据分配聚类标签

machine-learning - Apache Spark (MLLib) 用于实时分析

python - Pyspark 自连接错误 "Resolved attribute(s) missing"

python-3.x - 无法将文件从 AWS Glue dynamic_frame 解析为 Pyspark 数据框

apache-spark - Spark ML 朴素贝叶斯用概率预测多个类别

apache-spark - docker-compose v3 + apache spark,端口 7077 上的连接被拒绝

scala - 为什么在 spark-3 上写入 1900 年之前的时间戳不会抛出 SparkUpgradeException?

machine-learning - 为什么训练损失在每个 epoch 开始时都会增加?

python - 在 PySpark 中读取文件并将其转换为 Pandas Dataframe 时如何将第一行作为标题