2016-08-07 6 views
1

私はこのようなデータフレームを持っている:pysparkのデータフレームのすべての列を爆発させる方法は?

+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+ 
|    brand|    diesel|     e10|     e5|   houseNumber|     id|    isOpen|     lat|     lng|    name|    place|   postCode|    street|    Datum| 
+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+ 
|[TOTAL, ARAL, She...|[1.049, 1.029, 1....|[1.249, 1.209, 1....|[1.269, 1.229, 1....|[49, 12-14, , , ...|[4409a024-b190-4b...|[true, true, true...|[50.93128, 50.952...|[6.962356, 6.9616...|[TOTAL KOELN, Ara...|[KOELN, Köln, KOE...|[50676, 50668, 50...|[HOLZMARKT, Riehl...|2016-08-01 10:50:...| 
+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+ 

基本的にすべての列が配列されています。これはネストされたJSONデータに基づいています。 私はそれを爆発させようとしました。しかし、これはselect文の1つの列でのみ可能です。関係が維持されるように、すべての値を一度にどのように解凍してpysparkにすることができるのか、あなたは知っていますか?

答えて

0

最初にすべてを1つの列にマップし、次に分解してから分割することができます。

df=sc.parallelize([[[1,2,3,4],[10, 20,30,40]]]).toDF() 
F=udf(lambda x,y: [[x[i],y[i]]\ 
    for i in range(4)],ArrayType(ArrayType(IntegerType()))) 

df.withColumn('merge',F(df._1,df._2))\ 
    .select(['merge', functions.explode(col('merge'))]) 

まず、DF出力

+------------+----------------+ 
|   _1|    _2| 
+------------+----------------+ 
|[1, 2, 3, 4]|[10, 20, 30, 40]| 
+------------+----------------+ 

その後、最後の列は、あなたが分割するために必要なものです:

+--------------------+-------+ 
|    merge| _c0| 
+--------------------+-------+ 
|[WrappedArray(1, ...|[1, 10]| 
|[WrappedArray(1, ...|[2, 20]| 
|[WrappedArray(1, ...|[3, 30]| 
|[WrappedArray(1, ...|[4, 40]| 
+--------------------+-------+ 
関連する問題