2016-10-18 5 views
3

現在、1つの列が「a b c d e ...」のデータフレームがあります。この列を「col4」と呼ぶPySpark Dataframeの行を複数の行に分割する

他のすべての列の値を保持しながら、col4の要素を分割して1行を複数に分割したいとします。

したがって、例えば、単一の行とDFを与え

COL1 [0] | col2 [0] | col3 [0] | a b c |私は出力がなりたい

col1の[0] | col2 [0] | col3 [0] | |

col1 [0] | col2 [0] | col3 [0] | b |

col1 [0] | col2 [0] | col3 [0] | c |

分割を使用して

や機能を爆発、私は次のことを試してみました:

d = COMBINED_DF.select(col1, col2, col3, explode(split(my_fun(col4), " "))) 

しかし、これは次の出力が生成されます。

col1の[0] | col2 [0] | col3 [0] | a b c |

col1 [0] | col2 [0] | col3 [0] | a b c |

col1 [0] | col2 [0] | col3 [0] | a b c |

これは私が望むものではありません。ここで

答えて

4

は再現例です:

# Create dummy data 
df = sc.parallelize([(1, 2, 3, 'a b c'), 
        (4, 5, 6, 'd e f'), 
        (7, 8, 9, 'g h i')]).toDF(['col1', 'col2', 'col3','col4']) 


# Explode column 
from pyspark.sql.functions import split, explode 
df.withColumn('col4',explode(split('col4',' '))).show() 
+----+----+----+----+ 
|col1|col2|col3|col4| 
+----+----+----+----+ 
| 1| 2| 3| a| 
| 1| 2| 3| b| 
| 1| 2| 3| c| 
| 4| 5| 6| d| 
| 4| 5| 6| e| 
| 4| 5| 6| f| 
| 7| 8| 9| g| 
| 7| 8| 9| h| 
| 7| 8| 9| i| 
+----+----+----+----+ 
関連する問題