Удалить все столбцы StructType из PySpark DataFrame - PullRequest
0 голосов
/ 16 декабря 2018

У меня есть фрейм данных df, который читает файл JSON следующим образом:

df = spark.read.json("/myfiles/file1.json")

df.dtypes показывает следующие столбцы и типы данных:

id – string
Name - struct
address - struct
Phone - struct
start_date - string
years_with_company - int
highest_education - string
department - string
reporting_hierarchy - struct

Я хочу извлечь только неструктурные столбцы и создать фрейм данных.Например, мой результирующий фрейм данных должен иметь только id, start_date, highest_education и department.

Вот код, который у меня есть, который частично работает, так как я получаю только последний нестолбец -struct department значения заполнены в нем.Я хочу собрать все столбцы неструктурного типа и затем преобразовать их во фрейм данных:

names = df.schema.names

for col_name in names:
   if isinstance(df.schema[col_name].dataType, StructType):
      print("Skipping struct column %s "%(col_name))
   else:
      df1 = df.select(col_name).collect() 

Я почти уверен, что это не лучший способ сделать это, и я упустил что-то, что не могу поставитьмой палец, поэтому я был бы признателен за вашу помощь.Спасибо.

1 Ответ

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

Используйте понимание списка:

cols_filtered = [
    c for c in df.schema.names 
    if not isinstance(df.schema[c].dataType, StructType) 
]    

Или

# Thank you @pault for the suggestion!
cols_filtered = [c for c, t in df.dtypes if t != 'struct']

Теперь вы можете передать результат в df.select.

df2 = df.select(*cols_filtered)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...