如何解决如何使用databricks中的pyspark将Spark数据帧中的所有行数据提取到文件中
我正在尝试从spark数据帧中获取所有行数据到databricks中的文件。我能够将df数据写入文件的次数很少。假设如果我在df中得到的计数为100,那么在文件中它的计数为50,因此它正在跳过数据。如何将完整的数据从数据帧加载到文件而不跳过数据。我已经创建了一个udf,该udf将打开文件并将其追加到文件中。我在spark sql df中将该udf称为
。有人可以帮助我解决这个问题吗?
解决方法
出于某些原因,我建议您不要以自己的方式使用udf:
- UDF在工作程序节点上运行,因此您将有多个udf,每个udf会将一部分数据写入本地文件。
- 即使您的UDF追加到共享位置(如DBFS)的文件中,也仍然有多个节点同时写入文件,这可能会导致错误。
- Spark已经有一种开箱即用的方式,您应该利用它
要将spark数据帧写入数据块中的文件: 使用Dataframe.write属性(Databricks docs)。 有很多选择,因此应该能够做您需要的任何事情(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")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。