Pyspark удаляет столбцы с 10 нулевыми значениями - PullRequest
0 голосов
/ 28 сентября 2019

Я новичок в PySpark.

Я прочитал файл паркета.Я хочу сохранить только столбцы, имеющие не менее 10 значений

Я использовал описание, чтобы получить количество ненулевых записей для каждого столбца

Как теперь извлечь имена столбцов, которые имеют меньшечем 10 значений, а затем отбросьте эти столбцы перед записью в новый файл

df = spark.read.parquet(file)

col_count = df.describe().filter($"summary" == "count")

1 Ответ

1 голос
/ 28 сентября 2019

Вы можете преобразовать его в словарь, а затем отфильтровать ключи (имена столбцов) на основе их значений (количество <10, число равно <em>StringType () , которое необходимо преобразовать в int в коде Python):

# here is what you have so far which is a dataframe
col_count = df.describe().filter('summary == "count"')

# exclude the 1st column(`summary`) from the dataframe and save it to a dictionary
colCountDict = col_count.select(col_count.columns[1:]).first().asDict()

# find column names (k) with int(v) < 10
bad_cols = [ k for k,v in colCountDict.items() if int(v) < 10 ]

# drop bad columns
df_new = df.drop(*bad_cols)

Некоторые примечания:

  • использовать подход @ pault, если информация не можетПолучить непосредственно из df.describe () или df.summary () и т. д.

  • вам нужно drop () вместо select () столбцы, так как description () / summary () включают только числовые и строки столбцы, select выбор столбцов из спискаобработанный df.describe () потеряет столбцы TimestampType (), ArrayType () и т. д.

...