SQLcontext меняет поле String на Long: Spark 1.5

Я сохранил свои записи в формате паркета и использую Spark1.5. Но когда я пытаюсь получить столбцы, он выдает исключение

java.lang.ClassCastException: java.lang.Long нельзя преобразовать в org.apache.spark.unsafe.types.UTF8String.

Это поле сохраняется как String при написании паркета. так вот пример кода и вывод для того же ..

logger.info("troubling thing is ::" + 
    sqlContext.sql(fileSelectQuery).schema().toString()); 

DataFrame df= sqlContext.sql(fileSelectQuery); 

JavaRDD<Row> rdd2 = df.toJavaRDD(); 

* Первая строка кода (Регистратор) печатает следующее:

беспокоит то, что :: StructType (StructField (batch_id, StringType, true)) *

Но в следующий момент возникает исключение.

Есть идеи, почему он обрабатывает поле как Long? (да, одна уникальная особенность столбца - это всегда число, например, отметка времени).

Любая помощь приветствуется.


person Abhishek    schedule 09.10.2015    source источник
comment
Вы проверили метаданные?   -  person zero323    schedule 10.10.2015
comment
Я действительно предлагаю вам использовать Scala вместо Java, но вы можете использовать udf и изменить тип данных, возвращаемый после операции, в Scala это очень просто   -  person Alberto Bonsanto    schedule 10.10.2015


Ответы (1)


Так что я смог найти решение проблемы.

  1. Я не стал использовать SCALA.
  2. Больше поискал и прочитал и нашел это:

http://spark.apache.org/docs/latest/sql-programming-guide.html#partition-discovery

Обратите внимание, что типы данных столбцов разделения выводятся автоматически. В настоящее время поддерживаются числовые типы данных и строковые типы. Иногда пользователи могут не захотеть автоматически определять типы данных столбцов разделения. Для этих случаев использования автоматический вывод типа можно настроить с помощью spark.sql.sources.partitionColumnTypeInference.enabled, которое по умолчанию равно true. Когда вывод типа отключен, для столбцов разделения будет использоваться строковый тип.

И после изменения упомянутой конфигурации проблема решилась как шарм. :)

person Abhishek    schedule 12.10.2015