В работе AWS Glue ETL отсутствуют поля, видимые для сканера - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть таблица, созданная сканером, указывающая на некоторые файлы паркета, хранящиеся в s3.В графическом интерфейсе каталога данных Glue я вижу много полей (53).

Когда я открываю конечную точку разработчика ETL и подключаюсь к записной книжке Sagemaker, загружаю ту же таблицу и запускаю printSchema, я вижу намного меньше полей (36), используя код ниже.

from pyspark.context import SparkContext
from awsglue.context import GlueContext, DynamicFrame

# Get the right stuff
glueContext = GlueContext(SparkContext.getOrCreate())

data = glueContext.create_dynamic_frame.from_catalog(database = "my_database", table_name = "my_table")

print('Fields: ', len(data.schema().fields))
data.printSchema()

возвращает только 36 полей.Может кто-нибудь сказать мне, как получить доступ к пропущенным полям?Похоже, это чаще всего происходит на малонаселенных полях.

Редактировать: Этот неотвеченный вопрос на форумах AWS, по-видимому, связан с той же проблемой - очевидно, PySpark пытается определить свою собственную схему, а не использовать схему, найденную сканером.

Ответы [ 3 ]

0 голосов
/ 19 декабря 2018

Для файлов паркета Glue использует программу чтения Spark и, следовательно, полагается на схему, унаследованную от файла, вместо использования схемы из каталога данных, созданного crawler.

Если в исходной папке есть файлы с разными схемами, сканер Glue объединяетсяэто в единую схему, которая отличает ее от той, что вы видите в ETL.

0 голосов
/ 26 декабря 2018

Вы пробовали «Обновить все новые и существующие разделы метаданными из таблицы» в разделе «Вывод -> Параметры конфигурации (необязательно)» в Crawler?

0 голосов
/ 14 декабря 2018

Вы пробовали .create_dynamic_frame.from_options и читали напрямую из корзины s3?Иногда это ведет себя не так, как Crawler.

...