如何使用具有不受支持类型的 Spark 读取镶木地板?
Posted
技术标签:
【中文标题】如何使用具有不受支持类型的 Spark 读取镶木地板?【英文标题】:How do I read parquet with Spark that has unsupported types? 【发布时间】:2020-04-20 18:59:08 【问题描述】:我想使用 PySpark 从包含 UINT64
列的 parquet 文件中提取数据,这些列当前映射到 Spark 中的 typeNotSupported()
。我不需要这些列,所以我希望我可以通过以下命令使用谓词下推来拉出其他列:
spark.read.parquet('path/to/dir/').select('legalcol1', 'legalcol2')
但是,我仍然遇到以下错误。
An error was encountered:
An error occurred while calling o86.parquet.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 0.0 failed 4 times,
most recent failure: Lost task 0.3 in stage 0.0 (TID 3, ..., executor 1):
org.apache.spark.sql.AnalysisException: Parquet type not supported: INT64 (UINT_64);
有没有办法在不引发上述错误的情况下摄取这些数据?
【问题讨论】:
您使用的是哪个版本的 spark ? 我使用的是 2.4.3 版本 AFAIK 与 spark 是不可能的。可能您必须使用镶木地板工具进行这些转换? 【参考方案1】:您可以尝试将任何列类型转换为另一种列类型:
val df = spark.read.parquet('path/to/dir/')
df.select(col('legalcol1').cast('string').alias('col1'), col('legalcol2').cast('string').alias('col2'))
转换为 bigint 列类型:
df.select(col('uint64col').cast('bigint').alias('bigint_col'))
【讨论】:
这不是问题的答案。 您可以进行任何属于该事项的调整,并像上面的示例一样进行适当的类型转换。 @jo0gbe4bstjb 这不是一个答案,因为read
的类似会引发异常。以上是关于如何使用具有不受支持类型的 Spark 读取镶木地板?的主要内容,如果未能解决你的问题,请参考以下文章
如何在读取前根据定义的模式读取 pyspark 中的镶木地板文件?
读取镶木地板文件时,有没有办法在 basePath 中使用通配符?
如何使用 pyarrow 和 parquet 保存具有自定义类型的 pandas DataFrame