pyspark sqlfunction expr未按预期工作。
我的test1.txt包含
101|10|4
101|12|1
101|13|3
101|14|2
我的test2.txt包含
101|10|4
101|11|1
101|13|3
101|14|2
我使用上面的数据创建了两个数据帧,如下面的代码。
df3 = spark.createDataFrame(sc.textFile("C://Users//cravi//Desktop//test1.txt").map( lambda x: x.split("|")[:3]),["cid","pid","pr"])
df4 = spark.createDataFrame(sc.textFile("C://Users//cravi//Desktop//test2.txt").map( lambda x: x.split("|")[:3]),["cid","pid","p"])
df5=df4.withColumnRenamed("p", "p")\
.join(df3.withColumnRenamed("pr", "Pr")\
, ["cid", "pid"], "outer")\
.na.fill(0)
tt=df5.withColumn('flag', sf.expr("case when p>0 and pr=='null' then 'N'\
when p=0 and Pr>0 then 'D'\
when p=Pr then 'R'\
else 'U' end"))
tt.show()
我得到的输出如下
+---+---+----+----+----+
|cid|pid| p| Pr|flag|
+---+---+----+----+----+
|101| 14| 2| 2| R|
|101| 10| 4| 4| R|
|101| 11| 1|null| U|
|101| 12|null| 1| U|
|101| 13| 3| 3| R|
+---+---+----+----+----+
pyspark sqlfunction expr未按预期工作。
如果
p
和
pr
和我的一样
falg
将
'R'
.
如果
第页
一些价值和
公共关系
是空的,我的
flag
将
'N'
如果
第页
为空并且
公共关系
我的旗帜有价值吗
'D'
另一种情况我的旗帜是
'U'
在这种情况下,预期输出为:
+---+---+----+----+----+
|cid|pid| p| Pr|flag|
+---+---+----+----+----+
|101| 14| 2| 2| R|
|101| 10| 4| 4| R|
|101| 11| 1|null| N|
|101| 12|null| 1| D|
|101| 13| 3| 3| R|
+---+---+----+----+----+