我使用PySpark並且遇到一些麻煩,如果RDD包含長字符串,爲什麼合併兩個RDD會失敗。用長字符串合併兩個RDD將數值的順序混合起來
特別是,我有兩個RDDS與結構
RDD1集=(KEY1,[string11,string12]],[KEY2,[string21,string22]],...)
RDD2 =(KEY1,[string13,string14,string15]],[KEY2,[string23,string24,string25]],...)
其中字符串可以變得相當長(即,它們是價值幾MB)。我的最終目的是要得到一個新的 「合併和扁平」 RDD與內容
rdd3 =(KEY1,string11,string12,string13,string14,string15],[KEY2,string21,string22,string23,string24 ,string25],...)
爲此我使用Python命令
rdd3 = sparkContext.union([rdd1, rdd2]).groupByKey() \
.mapValues(lambda x: list(x)).map(lambda x: [x[0]] + list(x[1][0]) + list(x[1][1]))
這似乎是一個簡單的任務,實際上,此命令效果很好,如果字符串是小的。然而,對於非常長字符串所得RDD的順序被突然混合起來在一個看似隨機的方式等
rdd3 =(KEY1,string14,string15,string12,string13,string11],[KEY2,string21, string22,string24,string25,string23],...)
雖然union
似乎維持秩序,必須某處groupByKey
和map
之間發生混合。我認爲扁平化似乎不成問題。但由於groupByKey
返回ResultIterable
,很難弄清細節。總而言之,我不知道這裏發生了什麼。任何人都可以給我一個提示嗎?我目前正在本地測試客戶端上運行Spark,只有少數工作人員,如果這很重要的話。