Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用DataRicks中的pyspark将spark dataframe中的所有行数据提取到文件中_Python_Pyspark_Apache Spark Sql_Azure Databricks - Fatal编程技术网

Python 如何使用DataRicks中的pyspark将spark dataframe中的所有行数据提取到文件中

Python 如何使用DataRicks中的pyspark将spark dataframe中的所有行数据提取到文件中,python,pyspark,apache-spark-sql,azure-databricks,Python,Pyspark,Apache Spark Sql,Azure Databricks,我正在尝试将所有行数据从spark dataframe提取到DataRicks中的一个文件中。我能够将df数据写入一个只有很少计数的文件。假设df中的计数为100,那么文件中的计数为50,因此跳过了数据。如何将已完成的数据从dataframe加载到文件中而不跳过数据。我创建了一个udf,udf将打开文件并将数据附加到其中。我在spark sql df中调用了该udf 有人能帮我解决这个问题吗?我建议不要像您这样使用udf,原因如下: UDF在工作节点上运行,因此您将有多个UDF,每个UDF将一

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


有人能帮我解决这个问题吗?

我建议不要像您这样使用udf,原因如下:

  • UDF在工作节点上运行,因此您将有多个UDF,每个UDF将一部分数据写入本地文件
  • 即使将UDF附加到共享位置(如DBF)中的文件,仍有多个节点同时写入文件,这可能会导致错误
  • Spark已经有了一种开箱即用的方法,您应该充分利用它
将spark数据帧写入DataRicks中的文件: 使用Dataframe.write属性()。 有很多选择,所以你应该能够做任何你需要的事(这是为CSV准备的)

关于分区的注意事项:Spark将DF的每个分区写入其自己的文件中,因此您应该使用coalesce函数(警告:对于非常大的数据帧,这非常缓慢,因为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")
df_to_write=my_df.select()
df_to_write.coalesce(1.write.csv)(“/dbfs/myFileDownloads/dataframeDownload.csv”)

您能分享一下您要执行的代码吗?