use*_*956 22 apache-spark parquet pyspark
response = "mi_or_chd_5"
outcome = sqlc.sql("""select eid,{response} as response
from outcomes
where {response} IS NOT NULL""".format(response=response))
outcome.write.parquet(response, mode="overwrite") # Success
print outcome.schema
StructType(List(StructField(eid,IntegerType,true),StructField(response,ShortType,true)))
Run Code Online (Sandbox Code Playgroud)
但是之后:
outcome2 = sqlc.read.parquet(response) # fail
Run Code Online (Sandbox Code Playgroud)
失败了:
AnalysisException: u'Unable to infer schema for Parquet. It must be specified manually.;'
Run Code Online (Sandbox Code Playgroud)
在
/usr/local/lib/python2.7/dist-packages/pyspark-2.1.0+hadoop2.7-py2.7.egg/pyspark/sql/utils.pyc in deco(*a, **kw)
Run Code Online (Sandbox Code Playgroud)
镶木地板的文档说格式是自我描述的,并且在保存镶木地板文件时可以使用完整的模式.是什么赋予了?
使用Spark 2.1.1.在2.2.0中也失败了.
发现此错误报告,但已在2.0.1,2.1.0中修复.
更新:当与master ="local"连接时,此工作,当连接到master ="mysparkcluster"时失败.
Jav*_*tón 33
当您尝试将空目录读取为镶木地板时,通常会发生此错误.可能你的结果 Dataframe是空的.
outcome.rdd.isEmpty()在写入之前,您可以检查DataFrame是否为空.
就我而言,发生错误是因为我试图读取以下划线开头的镶木地板文件(例如_lots_of_data.parquet)。不知道为什么这是一个问题,但删除前导下划线解决了这个问题。
也可以看看:
我正在使用 AWS Glue,并且在从数据目录表(位置:s3 存储桶)读取数据时收到此错误。经过一些分析,我意识到,这是由于文件位置(在我的情况下为 s3 存储桶路径)中的文件不可用。
Glue 试图在不存在的文件上应用数据目录表架构。
将文件复制到 s3 存储桶文件位置后,问题得到解决。
希望这对在 AWS Glue 中遇到/遇到错误的人有所帮助。
只是为了在评论中强调@Davos 答案,如果您的文件名在文件名开头有一个点.或下划线,您将遇到这个确切的异常错误_
val df = spark.read.format("csv").option("delimiter", "|").option("header", "false")
.load("/Users/myuser/_HEADER_0")
org.apache.spark.sql.AnalysisException:
Unable to infer schema for CSV. It must be specified manually.;
Run Code Online (Sandbox Code Playgroud)
解决方案是重命名该文件并重试(例如_HEADER重命名为HEADER)
| 归档时间: |
|
| 查看次数: |
43626 次 |
| 最近记录: |