spark2.0.1 - сбой обнаружения раздела

У меня есть следующие паркетные файлы в секционированных каталогах:

/files/dataset
  /id=1
       parquet.gz 
  /id=2
       parquet.gz      
  /id=3
       parquet.gz

В spark1.6 их можно получить следующим образом:

val arr = sqlContext.read.parquet("/files/dataset/").collect

Однако в spark2.0.1 этот код вызывает ошибку:

val arr = spark.read.parquet("/files/dataset/").collect


java.lang.NullPointerException
    at org.apache.spark.sql.execution.vectorized.OnHeapColumnVector.getLong(OnHeapColumnVector.java:272)
    at org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIterator.processNext(Unknown Source)
    at org.apache.spark.sql.execution.BufferedRowIterator.hasNext(BufferedRowIterator.java:43)
    at org.apache.spark.sql.execution.WholeStageCodegenExec$$anonfun$8$$anon$1.hasNext(WholeStageCodegenExec.scala:370)
    at org.apache.spark.sql.execution.SparkPlan$$anonfun$4.apply(SparkPlan.scala:246)
    at org.apache.spark.sql.execution.SparkPlan$$anonfun$4.apply(SparkPlan.scala:240)
    at org.apache.spark.rdd.RDD$$anonfun$mapPartitionsInternal$1$$anonfun$apply$24.apply(RDD.scala:803)
    at org.apache.spark.rdd.RDD$$anonfun$mapPartitionsInternal$1$$anonfun$apply$24.apply(RDD.scala:803)
    at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38)
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:319)
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:283)
    at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:70)
    at org.apache.spark.scheduler.Task.run(Task.scala:86)
    at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:274)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745) 

Отдельные каталоги разделов могут быть прочитаны отдельно и объединены, но Im любопытно, какие расхождения я должен искать.

ОБНОВЛЕНИЕ: секционированные каталоги были записаны через три отдельные записи, например, df.where(id=1).write.parquetвместо df.write.partitionBy. Это, по-видимому, корень проблемы. Однако я активно пытаюсь определить, почему чтение / сбор преуспевает в предыдущей версии искры.

UPDATE: столбец «id» выше - длинный, который при написании явно (например, df.write.parquet ('/ files / dataset / id = 1') выдает ошибки во время чтения. Открытие раздела, по-видимому, пытается прочитать раздел как IntType, а не Long. См. Https://issues.apache.org/jira/browse/SPARK-18108

partitioning,parquet,apache-spark-2.0,

2

Ответов: 0

spark2.0.1 - сбой обнаружения раздела

У меня есть следующие паркетные файлы в секционированных каталогах:

/files/dataset
  /id=1
       parquet.gz 
  /id=2
       parquet.gz      
  /id=3
       parquet.gz

В spark1.6 их можно получить следующим образом:

val arr = sqlContext.read.parquet("/files/dataset/").collect

Однако в spark2.0.1 этот код вызывает ошибку:

val arr = spark.read.parquet("/files/dataset/").collect


java.lang.NullPointerException
    at org.apache.spark.sql.execution.vectorized.OnHeapColumnVector.getLong(OnHeapColumnVector.java:272)
    at org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIterator.processNext(Unknown Source)
    at org.apache.spark.sql.execution.BufferedRowIterator.hasNext(BufferedRowIterator.java:43)
    at org.apache.spark.sql.execution.WholeStageCodegenExec$$anonfun$8$$anon$1.hasNext(WholeStageCodegenExec.scala:370)
    at org.apache.spark.sql.execution.SparkPlan$$anonfun$4.apply(SparkPlan.scala:246)
    at org.apache.spark.sql.execution.SparkPlan$$anonfun$4.apply(SparkPlan.scala:240)
    at org.apache.spark.rdd.RDD$$anonfun$mapPartitionsInternal$1$$anonfun$apply$24.apply(RDD.scala:803)
    at org.apache.spark.rdd.RDD$$anonfun$mapPartitionsInternal$1$$anonfun$apply$24.apply(RDD.scala:803)
    at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38)
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:319)
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:283)
    at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:70)
    at org.apache.spark.scheduler.Task.run(Task.scala:86)
    at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:274)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745) 

Отдельные каталоги разделов могут быть прочитаны отдельно и объединены, но Im любопытно, какие расхождения я должен искать.

ОБНОВЛЕНИЕ: секционированные каталоги были записаны через три отдельные записи, например, df.where(id=1).write.parquetвместо df.write.partitionBy. Это, по-видимому, корень проблемы. Однако я активно пытаюсь определить, почему чтение / сбор преуспевает в предыдущей версии искры.

UPDATE: столбец «id» выше - длинный, который при написании явно (например, df.write.parquet ('/ files / dataset / id = 1') выдает ошибки во время чтения. Открытие раздела, по-видимому, пытается прочитать раздел как IntType, а не Long. См. Https://issues.apache.org/jira/browse/SPARK-18108

02перегородки, паркет, апаш-искровой 2.0,