python-PySpark中的高效列处理

我有一个数据列,其中的列数非常多(> 30000).

我根据这样的第一列用1和0填充它:

for column in list_of_column_names:
  df = df.withColumn(column, when(array_contains(df['list_column'], column), 1).otherwise(0))

但是,此过程需要很多时间.有办法更有效地做到这一点吗?告诉我列处理可以并行化.

编辑:

样本输入数据

+----------------+-----+-----+-----+
|  list_column   | Foo | Bar | Baz |
+----------------+-----+-----+-----+
| ['Foo', 'Bak'] |     |     |     |
| ['Bar', Baz']  |     |     |     |
| ['Foo']        |     |     |     |
+----------------+-----+-----+-----+

解决方法:

您可能会这样,

import pyspark.sql.functions as F

exprs = [F.when(F.array_contains(F.col('list_column'), column), 1).otherwise(0).alias(column)\
                  for column in list_column_names]

df = df.select(['list_column']+exprs)
上一篇:python-pyspark:系统找不到指定的路径


下一篇:mysql-Pyspark DataFrameWriter jdbc函数的ignore选项会忽略整个事务还是只是冒犯行?