2017-09-27 104 views
1

我有一個數據幀df已結構如下:數據框中Apache中pyspark轉星火

+-----+-----+-----+-------+ 
| s |col_1|col_2|col_...| 
+-----+-------------------+ 
| f1 | 0.0| 0.6| ... | 
| f2 | 0.6| 0.7| ... | 
| f3 | 0.5| 0.9| ... | 
| ...| ...| ...| ... | 

我要計算這個數據幀的轉置,從而將看起來像

+-------+-----+-----+-------+------+ 
| s | f1 | f2 | f3 | ...| 
+-------+-------------------+------+ 
|col_1 | 0.0| 0.6| 0.5 | ...| 
|col_2 | 0.6| 0.7| 0.9 | ...| 
|col_...| ...| ...| ... | ...| 

我將這兩個解決方案綁定在一起,但它返回的數據幀沒有指定的使用方法:

方法1:

for x in df.columns: 
    df = df.pivot(x) 

方法2:

df = sc.parallelize([ (k,) + tuple(v[0:]) for k,v in df.items()]).toDF() 

我怎麼能解決這個問題。

+0

你可以看看這裏https://stackoverflow.com/questions/36215755/transpose-dataframe-using-spark-scala-without-using-pivot-function –

回答

2

如果數據足夠小,可以調換(不帶聚集轉動),你只需將它轉換爲大熊貓DataFrame

df = sc.parallelize([ 
    ("f1", 0.0, 0.6, 0.5), 
    ("f2", 0.6, 0.7, 0.9)]).toDF(["s", "col_1", "col_2", "col_3"]) 

df.toPandas().set_index("s").transpose() 
s  f1 f2 
col_1 0.0 0.6 
col_2 0.6 0.7 
col_3 0.5 0.9 

如果是大這一點,星火也無濟於事。 Spark DataFrame按行分配數據(儘管本地使用列存儲),因此單個行的大小限制爲本地內存。