繁体   English   中英

如何使用databricks中的pyspark将spark数据帧中的所有行数据提取到文件中

[英]How to fetch all rows data from spark dataframe to a file using pyspark in databricks

我正在尝试将所有行数据从 spark 数据帧中提取到数据块中的文件中。 我能够将 df 数据写入只有很少计数的文件。 假设如果我将 df 中的计数设为 100 ,那么在文件中它的计数为 50 ,因此它正在跳过数据。如何将已完成的数据从数据帧加载到文件中而不跳过数据。 我创建了一个 udf,udf 将打开文件并将数据附加到它。我在 spark sql df 中调用了该 udf。

有人可以帮助我解决这个问题吗?

出于以下几个原因,我建议您不要像现在这样使用 udf:

  • UDF 在工作节点上运行,因此您将有多个 udf,每个 udf 将您的数据的一部分写入本地文件。
  • 即使您将 UDF 附加到共享位置(如 DBFS)中的文件,您仍然有多个节点同时写入文件,这可能会导致错误。
  • Spark 已经有一种开箱即用的方法,您应该利用它

要将 spark 数据帧写入 databricks 中的文件:使用 Dataframe.write 属性( Databricks 文档)。 有很多选择,所以应该可以做任何你需要的事情( Spark docs (这个是针对 CSV 的))

关于分区的注意事项: Spark 将 DF 的每个分区写入自己的文件中,因此您应该使用合并函数(警告:这对于非常大的数据帧来说非常慢,因为 Spark 必须将整个数据帧放入驱动程序节点的内存中)

关于文件位置的注意事项:您提供的文件路径将在驱动程序节点上,因此除非您打算用另一个脚本读回它,否则您应该以 "/dbfs" 开始您的路径,该路径安装在所有节点的文件上系统。通过这种方式,它保存在 Databricks 文件系统上,可以从您的 databricks 实例中的任何集群访问。 (也可以使用 Databricks CLI 下载。)

完整示例:

df_to_write = my_df.select(<columns you want>)
df_to_write.coalesce(1).write.csv("/dbfs/myFileDownloads/dataframeDownload.csv")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM