使用 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 不,这会引发同样的错误。我还尝试了describehead,但出现了同样的错误。 实际上,我开始认为它与特定数据集有关,而不是与 spark 本身有关。鉴于其特定的管道,并涉及用户定义的 ColumnDropper 阶段,我认为这可能是问题所在。 【参考方案1】:

我发现了这个数据框背后的问题。 这与作者无关,而与中间表计算有关。

正如@kfkhalili 指出的那样,为了验证它是否顺利运行,建议执行零星的.show()s。

谢谢。

【讨论】:

以上是关于使用 PySpark 写入数据帧时出错的主要内容,如果未能解决你的问题,请参考以下文章

如何在使用转义或引号在pyspark中的文件中写入数据帧时获得完全匹配? [复制]

写入数据帧时出错:java.lang.RuntimeException:scala.Tuple2 不是 struct<retailer:string,postcode:int> 架构的有效

如何更改pyspark中的列元数据?

尝试在 PySpark 中使用 partitionBy 写入 csv 时出错

将pyspark的数据框写入镶木地板时出错

使用 Pyspark 在 s3 中写入镶木地板文件时出错