2016-11-18 4 views
1

나는 두 열 "X1"및 "X2"하나의 열당 DataFrame을 변환하여 pyspark에 두 개의 새로운 열을 만드는 방법은 무엇입니까?

x1(status) x2 
kv,true  45 
bm,true  65 
mp,true  75 
kv,null  450 
bm,null  550 
mp,null  650 

가 I 데이터는 그 상태 값에 따라 필터링 된 포맷으로이 dataframe 변환 할 그들의시킨 dataframe "X"를 가지고

x1 true null 
kv 45 450 
bm 65 550 
mp 75 650 

이 할 수있는 방법이 있나요, 내가 pyspark의 datadrame

답변

2

을 사용하고 예, 방법이있다. 우선 split 함수를 사용 ,하여 첫 번째 열을 분할하고 스칼라 다음과 같이 될 것이다위한 점화 API에서 .. 두 dataframes (회 where 사용) 단순히 제 칼럼이 새로운 dataframes 가입에

이것을 dataframe 분할 :

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| 
+---+----+----+