Указание схемы Spark не будет отображать правильные результаты - PullRequest
0 голосов
/ 11 января 2020

Я указываю схему для моего искрового кода, но все результаты возвращают NULL. Однако, когда я получаю inferSchema = True, header = True, я получаю правильные результаты.

Например, моя схема выглядит следующим образом:

myschema = StructType([StructField("event_ts", IntegerType(), True)
                       ,StructField("sdk_ts", IntegerType(), True)
                       ,StructField("device_id", StringType(), True)
                       ,StructField("latitude", DoubleType(), True)
                       ,StructField("longitude", DoubleType(), True)
                       ,StructField("country", StringType(), True)])

Когда я применяю схему для чтения в файл как фрейм данных выглядит следующим образом:

testzip = spark.read.csv("adl://mylake.azuredatalakestore.net/filepath/01/000000000000.csv.gz",schema=myschema)

Я получаю следующие результаты, которые показывают NULL

enter image description here

Однако, когда я читаю в данные с inferSchema = True, header = True следующим образом, я получаю правильный результат, то есть без NULL

testzip = spark.read.csv("adl://mylake.azuredatalakestore.net/filepath/01/000000000000.csv.gz",inferSchema=True,header=True)

Я уверен, что упускаю что-то очень очевидное, но просто не вижу этого.

1 Ответ

1 голос
/ 11 января 2020

Записи не соответствуют схеме. Действие по умолчанию здесь - для spark выводить результаты в столбец с именем _corrupt_record (режим по умолчанию называется Permissive), который, если вы добавите к выбору, вы увидите свои данные.

Чтобы решить эту проблему, я бы изменил каждый тип данных в вашей схеме на StringType (). Теперь он должен дать вам результаты. Затем измените их обратно по одному, чтобы определить, какое преобразование не удается. Это, вероятно, двойной тип. Возможно импортировать как строку, а затем конвертировать.

Подробнее о разрешительном режиме здесь. https://spark.apache.org/docs/2.0.2/api/java/org/apache/spark/sql/DataFrameReader.html

...