【问题标题】:How do I read parquet with Spark that has unsupported types?如何使用具有不受支持类型的 Spark 读取镶木地板?
【发布时间】: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 是不可能的。可能您必须使用镶木地板工具进行这些转换?

标签: apache-spark pyspark


【解决方案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 的类似会引发异常。
猜你喜欢
  • 2015-10-27
  • 2021-01-30
  • 2017-03-11
  • 2021-05-27
  • 1970-01-01
  • 2018-11-22
  • 2019-02-22
  • 2017-03-14
  • 2017-01-22
相关资源
最近更新 更多