pyspark将Dataframe结果写入文本文件

dffbzjpn  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(1805)

我试图将Dataframe结果写入一个文本文件,我得到了下面的错误,我不明白数据类型到底出了什么问题
这是我的Dataframe结果

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

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.;'
cngwdvgl

cngwdvgl1#

这确实是预期的行为。你有两个选择来解决这个问题。要么将Dataframe的所有类型强制转换为 StringType (例如,使用这个答案如何将dataframe的所有列转换为字符串)并将它们连接在一起( 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 ,例如:

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

希望这有帮助!

相关问题