Как использовать несколько столбцов в фильтре и лямбда-функциях pyspark - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть фрейм данных, в котором я хочу удалить столбцы, имя которых начинается с «test», «id_1», «vehicle» и т. Д.

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

df1.drop(*filter(lambda col: 'test' in col, df.columns))

как указать все столбцы сразу в этой строке? это не работает:

df1.drop(*filter(lambda col: 'test','id_1' in col, df.columns))

Ответы [ 3 ]

0 голосов
/ 25 февраля 2020

В PySpark версии 2.1.0 можно удалить несколько столбцов, используя drop, предоставив список строк (с именами столбцов, которые вы хотите удалить) в качестве аргумента для drop. (См. Документацию http://spark.apache.org/docs/2.1.0/api/python/pyspark.sql.html?highlight=drop#pyspark. sql .DataFrame.drop ).

В вашем случае вы можете создать список, содержащий имена столбцов, которые вы хотите удалить. Например:

cols_to_drop = [x for x in colunas if (x.startswith('test') or x.startswith('id_1') or x.startswith('vehicle'))]

И затем применить drop, распаковывающий список:

df1.drop(*cols_to_drop)

В конечном итоге, можно также получить аналогичный результат, используя select. Например:

# Define columns you want to keep
cols_to_keep = [x for x in df.columns if x not in cols_to_drop]

# create new dataframe, df2, that keeps only the desired columns from df1
df2 = df1.select(cols_to_keep)

Обратите внимание, что при использовании select вам не нужно распаковывать список.

Обратите внимание, что этот вопрос также относится к аналогичным выпуск.

Надеюсь, это поможет.

0 голосов
/ 25 февраля 2020

Что ж, похоже, вы можете использовать обычный фильтр столбцов следующим образом:

val forColumns = df.columns.filter(x => (x.startsWith("test") || x.startsWith("id_1") || x.startsWith("vehicle"))) ++ ["c_007"]

df.drop(*forColumns)
0 голосов
/ 25 февраля 2020

Вы делаете что-то вроде следующего:

expression = lambda col: all([col.startswith(i) for i in ['test', 'id_1', 'vehicle']])
df1.drop(*filter(lambda col:  expression(col), df.columns))
...