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

时间:2018-09-19 10:34:42

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

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

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

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

1 个答案:

答案 0 :(得分:1)

到目前为止,就像Bi Rico指出的那样,到目前为止,您一直在对数据集执行“惰性”操作。这是惰性执行含义的detailed summary

本质上,您对数据集所做的任何转换(例如地图,flatMap,过滤器等)都不会执行,直到调用 action 为止。动作执行需要使用结果的操作,一些示例正在写入文件(saveAsTable),count(),take()等。

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

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

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

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

  • 避免引起改组的命令(例如groupByKey)。改组将所有数据重新分配到各自的分区,然后再合并它们。这导致大量的网络I / O。
  • 尝试正确划分数据。这将最大程度地并行处理您的数据
  • 将更多节点添加到群集和/或增加节点的大小(CPU /内存)。这不是一门精确的科学。更多节点可以帮助进行分区。只有在资源受限的情况下,才增加节点的大小。