Pyspark 将数据框结果写入文本文件
Pyspark writing data frame results into a text file
我正在尝试将数据帧结果写入文本文件,但出现以下错误,我不明白数据类型到底出了什么问题
这是我的 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.;'
这确实是预期的行为。你有两种选择来解决这个问题。要么将数据框的所有类型转换为 StringType
(例如使用此答案 )并将它们连接在一起(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
希望对您有所帮助!
我正在尝试将数据帧结果写入文本文件,但出现以下错误,我不明白数据类型到底出了什么问题
这是我的 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.;'
这确实是预期的行为。你有两种选择来解决这个问题。要么将数据框的所有类型转换为 StringType
(例如使用此答案 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
希望对您有所帮助!