pyspark - 将字符串列的 Spark 数据框拆分为多个 bool 列

标签 pyspark

我们有一个如下所示的 spark 数据框:

   id | value 
------+--------
    0 | A,B
    1 | A,C
    2 | B

我们想把它改造成:

   id | A     | B     | C
------+-------+-------+-------+
    0 | True  | True  | False | 
    1 | True  | False | True  | 
    2 | False | True  | False | 

进行这种转换的最佳方法是什么?

最佳答案

假设这是您的输入数据框:

df = spark.createDataFrame([(0,["A","B"]),(1,["A","C"]),(2, ["B"])],["id","value"])

然后使用 explodepivot 得到一个包含整数和空值的表。

df2 = df.withColumn("x",explode(df.value)).drop("value").groupBy("id").pivot("x").count()
df2.show()

+---+----+----+----+
| id|   A|   B|   C|
+---+----+----+----+
|  0|   1|   1|null|
|  1|   1|null|   1|
|  2|null|   1|null|
+---+----+----+----+

最后,你只需要将值转换为 bool 值,例如:

for col_name in df2.columns[1:]:
    df2 = df2.withColumn(col_name, col(col_name).isNotNull())

df2.show()

+---+-----+-----+-----+
| id|    A|    B|    C|
+---+-----+-----+-----+
|  0| true| true|false|
|  1| true|false| true|
|  2|false| true|false|
+---+-----+-----+-----+

关于pyspark - 将字符串列的 Spark 数据框拆分为多个 bool 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56306418/

相关文章:

python - 连接 Spark Dataframe 中包含列表值的列

python-3.x - PySpark:随机化数据框中的行

apache-spark - Spark Master 和 Workers 未通过本地主机地址连接

apache-spark - java.lang.IllegalArgumentException 在 org.apache.xbean.asm5.ClassReader.<init>(未知来源)与 Java 10

hadoop - 为什么此示例导致NaN?

python - 设置 Spark-testing-base 的 Spark Config 属性

apache-spark - Pandas UDF 不比 Spark UDF 快吗?

python - pyspark - 使用 OR 条件连接

python - 获取 java.lang.NoClassDefFoundError : scala/Product$class error when I am trying to use Spark lens in Pyspark Shell

apache-spark - 如何指定saveAsTable保存文件的路径?