python - 在 pyspark 中将多标签列转换为多列?

标签 python apache-spark-sql pyspark

我有一个像这样的 pyspark 数据框-

enter image description here

这是我试图解决的问题的简化版本。事实上,“标签”列一行中可能有多达 20 个项目(将是字符串)。现在我们只有 3 个选项可供选择,即 0、1 和 2。

对于图中所示的问题,我想要的是另外三列 - label_0、label_1 和 label_2。例如,转换后的表格将如下所示。

enter image description here

这可能看起来类似于进行 one-hot 编码。我发现在 pyspark 中很难做到这一点。

最佳答案

对于Spark2.4+,您可以尝试此操作。

labels=['0','1','2']

from pyspark.sql import functions as F
df.withColumn("struct", F.struct(*[(F.struct(F.expr("size(filter(label,x->x={}))"\
                                                    .format("'"+y+"'"))).alias(y)) for y in labels]))\
            .select("id",*[F.col("struct.{}.col1".format(x)).alias('label'+x) for x in labels]).show()

#+---+------+------+------+
#| id|label0|label1|label2|
#+---+------+------+------+
#|  0|     0|     1|     1|
#|  1|     1|     1|     0|
#|  2|     1|     1|     0|
#|  3|     1|     1|     0|
#+---+------+------+------+

关于python - 在 pyspark 中将多标签列转换为多列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61805777/

相关文章:

apache-spark - 为什么单个测试失败并显示 "Error XSDB6: Another instance of Derby may have already booted the database"?

python - 如何查看Databricks中的所有数据库和表

python - 如何使用 pandas 将箱线图的结果导出到 csv 文件?

python - 如何检查字符串是否只包含不可打印的字符和空格?

python - 为什么 pandas 的意思是,在日期时间上,在一系列上工作,但不在 groupby 对象上工作

python - 从 Spark GroupedData 对象中选择随机项

python - 使用 Pandas 时 dateutil.tz 包显然丢失了?

apache-spark - 如何将数据框保存到 PySpark 中的 Elasticsearch?

python-3.x - Cassandra 'Unable to connect to any servers' 错误代码 10061

amazon-web-services - 通过 Spark DataFrame 读取 S3 文件时,Glue 书签不起作用