3 回答

TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超8個(gè)贊
您需要使用flatMap,而不是map要在每個(gè)輸入行中創(chuàng)建多個(gè)輸出行。
from pyspark.sql import Row
def dualExplode(r):
rowDict = r.asDict()
bList = rowDict.pop('b')
cList = rowDict.pop('c')
for b,c in zip(bList, cList):
newDict = dict(rowDict)
newDict['b'] = b
newDict['c'] = c
yield Row(**newDict)
df_split = sqlContext.createDataFrame(df.rdd.flatMap(dualExplode))

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊
zip將obj的第一個(gè)元素與另一個(gè)對(duì)象的第一個(gè)元素,第2個(gè)和第2個(gè)元素等配對(duì)在一起,直到其中一個(gè)對(duì)象用完元素。您的情況是2個(gè)值之后。換句話說,它將配對(duì)元素,直到?jīng)]有更多要配對(duì)的項(xiàng)目為止。要提出任何建議,我需要知道您希望程序如何處理未配對(duì)的元素(例如,您是否要從第二組中獲取空值?)。同樣,在此示例中只有1 df。如果你的問題是從這一不同,它可能會(huì)更好,只是問了另一個(gè)問題
添加回答
舉報(bào)