Pyspark, имеющий проблемы с чтением файлов Parquet с помощью схемы слияния - PullRequest
0 голосов
/ 02 апреля 2019

У меня есть файл паркета на S3, который содержит несколько схем следующим образом:

s3://my_parquet_files
|-cid=abc
    |-schema1.snappy.parquet
|-cid=xyz
    |-schema2.snappy.parquet

Схемы для них:

Схема 1:

|-- a: integer (nullable = true)
|-- b: integer (nullable = true)

Схема 2:

|-- a: integer (nullable = true)
|-- b: integer (nullable = true)
|-- c: integer (nullable = true)

В кластере EMR следующий фрагмент кода работает правильно:

df = spark.read.option("mergeSchema", "true").parquet('s3://my_parquet_files')
df.show(n=5)

Однако, если те же данные считываются с использованием Spark SQL для таблицы, созданной в Афине, выдается ошибка:

spark = SparkSession.builder.appName('tmp').config("hive.metastore.client.factory.class", "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory").config("spark.sql.parquet.mergeSchema","true").enableHiveSupport().getOrCreate()
qry = 'select * from parquet_table'
df = spark.sql(qry)

Выдает ошибку:

Caused by: java.lang.UnsupportedOperationException: org.apache.parquet.column.values.dictionary.PlainValuesDictionary$PlainLongDictionary
...

Для кластера EMR настроено следующее:

  • Распределение Hadoop : Amazon 2.8.5

  • Приложения : искра 2.4.0, улей 2.3.4, ливи 0.5.0, дирижабль 0.8.0, ганглии 3.7.2

Я хочу не читать файлы паркета и createOrReplaceTempView и запускать на нем SQL.

Есть ли другие настройки, которые нужно установить? Как я могу прочитать данные с помощью SQL-запроса?

...