我有一个数据帧“x”,其中有两列“x1”和“x2”
x1(status) x2
kv,true 45
bm,true 65
mp,true 75
kv,null 450
bm,null 550
mp,null 650
我想将此数据帧转换为根据其状态和值
过滤数据的格式x1 true null
kv 45 450
bm 65 550
mp 75 650
有没有办法做到这一点, 我正在使用pyspark datadrame
答案 0 :(得分:2)
是的,有办法。首先使用split函数将第一列拆分为,
,然后将此数据框拆分为两个数据框(使用where
两次)并在第一列上简单地加入这些新数据框。
在Scala的Spark API中,它如下:
val x1status = Seq(
("kv,true",45),
("bm,true",65),
("mp,true",75),
("kv,null",450),
("bm,null",550),
("mp,null",650)).toDF("x1", "x2")
val x1 = x1status
.withColumn("split", split('x1, ","))
.withColumn("x1", 'split getItem 0)
.withColumn("status", 'split getItem 1)
.drop("split")
scala> x1.show
+---+---+------+
| x1| x2|status|
+---+---+------+
| kv| 45| true|
| bm| 65| true|
| mp| 75| true|
| kv|450| null|
| bm|550| null|
| mp|650| null|
+---+---+------+
val trueDF = x1.where('status === "true").withColumnRenamed("x2", "true")
val nullDF = x1.where('status === "null").withColumnRenamed("x2", "null")
val result = trueDF.join(nullDF, "x1").drop("status")
scala> result.show
+---+----+----+
| x1|true|null|
+---+----+----+
| kv| 45| 450|
| bm| 65| 550|
| mp| 75| 650|
+---+----+----+