Заранее определите тип данных для фрейма данных при чтении JSON - PullRequest
0 голосов
/ 17 июня 2019

У меня есть один файл json со 100 столбцами, и я хочу прочитать все столбцы вместе с предопределенным типом данных из двух столбцов.

Я знаю, что могу сделать это с помощью опции схемы:

struct1 = StructType([StructField("npi", StringType(), True), StructField("NCPDP", StringType(), True)

spark.read.json(path=abc.json, schema=struct1)

Однако этот код читает только два столбца:

>>> df.printSchema()
root
 |-- npi: string (nullable = true)
 |-- NCPDP: string (nullable = true)

Чтобы использовать приведенный выше код, я должен указать тип данных для всех 100 столбцов.Как я могу решить это?

Ответы [ 2 ]

1 голос
/ 17 июня 2019

Согласно официальной документации , схема может быть StructType или String.

. Я могу посоветовать вам 2 решения:

1 - Выиспользуйте схему фиктивного файла

Если у вас есть один легкий файл с той же схемой (т.е. одна строка с такой же структурой), вы можете прочитать его как Dataframe, а затем использовать схему для других ваших файлов json:

df = spark.read.json("/path/to/dummy/file.json")
schm = df.schema
df = spark.read.json(path="abc.json", schema=schm)

2 - вы генерируете схему

Для этого шага необходимо указать имя столбца (и, возможно, также типы).Давайте предположим, что col является диктовкой с (ключ, значение) как (имя столбца, тип столбца).

col_list = ['{col_name} {col_type}'.format(
    col_name=col_name,
    col_type=col_type,
) for col_name, col_type in col.items()]
schema_string = ', '.join(col_list)
df = spark.read.json(path="abc.json", schema=schema_string)
0 голосов
/ 17 июня 2019

Вы можете сначала прочитать все данные, а затем преобразовать два рассматриваемых столбца:

df = spark.read.json(path=abc.json)
df.withColumn("npi", df["npi"].cast("string"))\
  .withColumn("NCPDP", df["NCPDP"].cast("string"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...