2016-08-07 3 views
1

я получил DataFrame так:как взорвать все столбцы данных в 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. Вы знаете, почему я могу распаковать все значения сразу в pyspark, чтобы сохранить отношения?

ответ

0

Может быть, если вы сначала набросаете все на один столбец, затем взорветесь, а затем разделите.

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'))]) 

Первые Д.Ф. выходы

+------------+----------------+ 
|   _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]| 
+--------------------+-------+ 
Смежные вопросы