Pyspark 将数据帧结果写入文本文件

Posted

技术标签:

【中文标题】Pyspark 将数据帧结果写入文本文件【英文标题】:Pyspark writing data frame results into a text file 【发布时间】:2020-05-27 20:12:20 【问题描述】:

我正在尝试将数据框结果写入文本文件,但出现以下错误,我不明白数据类型到底出了什么问题

这是我的数据框结果

我正在使用下面的代码将结果写入文本文件

User_cast.write.mode("overwrite").option("compression","bzip2").format("text").save("loc/path")

遇到错误

pyspark.sql.utils.AnalysisException: u'Text data source does not support double data type.;'

【问题讨论】:

也许如果你执行User_cast.printSchema()问题会变得更清楚? 感谢@mazaneicha,我执行了 User_cast.printSchema() 并且架构定义如下 |-- id: string (nullable = true) |-- name: string (nullable = true) |--薪水:双倍(可为空=真) 【参考方案1】:

这确实是预期的行为。你有两个选择来解决这个问题。您可以将数据框的所有类型转换为StringType(例如,使用此答案how to cast all columns of dataframe to string)并将它们连接在一起(text 数据源仅支持一列),或者另存为csv。重构你的问题:

from pyspark.sql import SparkSession


spark = SparkSession.builder.getOrCreate()
colnames = [str(i+1) for i in range(11)]
df1 = spark._sc.parallelize([
  [it for it in range(11)], 
  [it for it in range(1,12)]]
).toDF((colnames))


df1.write.mode("overwrite").option("compression", "bzip2").format("text").save("./path")

Py4JJavaError: An error occurred while calling o67.save.
: org.apache.spark.sql.AnalysisException: Text data source does not support bigint data type.;

但是,我可以通过将格式更改为 csv 来写入 CSV,例如:

df1.write.mode("overwrite").option("compression", "bzip2").format("csv").save("./path")

查找输出(取决于您的分区等)

! ls path
part-00000-7db004e7-7309-466c-ba7b-112127e286ae-c000.csv.bz2
part-00001-7db004e7-7309-466c-ba7b-112127e286ae-c000.csv.bz2
part-00003-7db004e7-7309-466c-ba7b-112127e286ae-c000.csv.bz2
_SUCCESS

希望这会有所帮助!

【讨论】:

以上是关于Pyspark 将数据帧结果写入文本文件的主要内容,如果未能解决你的问题,请参考以下文章

从集群将整数/字符串写入 pyspark 中的文本文件

将pyspark数据框写入文本文件

在文本文件中写入/存储数据帧

将胶水pyspark错误写入文本文件

Pyspark - 将数据帧写入 2 个不同的 csv 文件

如何将存储在 HDFS 中包含行的文本文件转换为 Pyspark 中的数据框?