使用 PySpark 写入数据帧时出错
Posted
技术标签:
【中文标题】使用 PySpark 写入数据帧时出错【英文标题】:Error when writing dataframe with PySpark 【发布时间】:2020-09-03 17:36:08 【问题描述】:我无法将表格保存到几个不同来源中的任何一个。 我尝试了以下方法:
dataset.toPandas().to_csv("local_path")
dataset.createOrReplaceTempView("tempTable")
spark.sql("DROP TABLE IF EXISTS impala_table")
spark.sql((f"CREATE TABLE IF NOT EXISTS impala_table AS "
"SELECT * from tempTable"))
dataset.write.overwrite().saveAsTable("impala_table")
dataset.write.csv(file, header=True, mode="overwrite")
所以,我的推论是它甚至没有以任何形式写出来,但我不知道如何了解更多。
错误日志即使不相同,也非常相似。我发现最奇怪的是module named "src" that is not found
。这是我发现最重复和最相关的:
/opt/cloudera/parcels/SPARK2-2.3.0.cloudera4-1.cdh5.13.3.p0.611179/
lib/spark2/python/lib/py4j-0.10.7-src.zip/py4j/protocol.py in
get_return_value(answer, gateway_client, target_id, name)
326 raise Py4JJavaError(
327 "An error occurred while calling 012.\n".
--> 328 format(target_id, ".", name), value)
329 else:
330 raise
Py4JError( Py4JJavaError: An error occurred while calling o877.saveAsTable. :
org.apache.spark.SparkException: Job aborted. at
org.apache.spark.sql.execution.datasources.FileFormatWriter$.
write(FileFormatWriter.scala:224)
...
File "/opt/cloudera/parcels/SPARK2-2.3.0.cloudera4-1.cdh5.13.3.p0.611179/
lib/spark2/python/pyspark/serializers.py", line 566,
in loads return pickle.loads(obj, encoding=encoding)
ModuleNotFoundError: No module named 'src'
感谢您查看。 干杯。
【问题讨论】:
这个错误可能是由于dataset.write.saveAsTable("impala_table")
而没有mode("overwrite")
造成的吗?我怀疑该错误是由于 impala_table
已经可用。
哦。该表不存在,因此我尝试将其删除并保持原样。无论如何,我确定我之前尝试过。
在尝试任何这些保存操作之前,您能否show()
数据集?
@kfkhalili 不,这会引发同样的错误。我还尝试了describe
和head
,但出现了同样的错误。
实际上,我开始认为它与特定数据集有关,而不是与 spark 本身有关。鉴于其特定的管道,并涉及用户定义的 ColumnDropper
阶段,我认为这可能是问题所在。
【参考方案1】:
我发现了这个数据框背后的问题。 这与作者无关,而与中间表计算有关。
正如@kfkhalili 指出的那样,为了验证它是否顺利运行,建议执行零星的.show()
s。
谢谢。
【讨论】:
以上是关于使用 PySpark 写入数据帧时出错的主要内容,如果未能解决你的问题,请参考以下文章
如何在使用转义或引号在pyspark中的文件中写入数据帧时获得完全匹配? [复制]
写入数据帧时出错:java.lang.RuntimeException:scala.Tuple2 不是 struct<retailer:string,postcode:int> 架构的有效