2016-11-18 13 views
1

私は、データが、そのステータスと値に基づいてフィルタリングされている形式にこのデータフレームを変換する二つの列「X1」と「X2」は彼らのしているデータフレームの「x」、1列ごとにDataFrameを変換してpysparkに2列の新しい列を作成するにはどうすればいいですか?

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

答えて

2

を使用していますはい、方法があります。最初のScala用スパークAPIで..

split機能を使用して,による最初の列、2つのデータフレーム(2回whereを使用して)には、このデータフレームを分割し、単に最初の列に、この新しいデータフレームに参加を分割し、次のようにそれはなるだろう:

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| 
+---+----+----+ 
関連する問題