0
我超級新Python和Spark和我試圖通過一個分隔符來刪除string
內的值。我有以下幾行RDD。PySpark RDD列表拆分通過的Delimeter
我喜歡「_」下劃線之前刪除一切,只保留剩餘價值爲字符串。我嘗試使用下面的這樣的東西,但失敗了。任何幫助都是極好的。謝謝,我很抱歉,如果我錯過任何作爲noob的東西。
a.split('_')
File "<stdin>", line 1, in <module>
AttributeError: 'dict' object has no attribute 'split'
# Preferably Something Like This:
# Before
a = rdd.take(1)[1]
a
{u'bin1_11394071': 1, u'bin1_11052103': 1, u'bin1_11052101': 1}
# After
new_a.take(1)[1]
new_a
{u'11394071': 1, u'11052103': 1, u'11052101': 1}
嘿@Suresh,我想上面的代碼,它工作時,我用它在一個單一的紀錄,但我想在一個RDD每個記錄做到這一點。我會顯示代碼和錯誤。 #樣品1 RDD測試功能記錄 a = rdd3.take(1)[0]#測試1個記錄的RDD {u'bin1_11394071':1,u'bin1_11052103':1,u'bin1_11052101': 1} #您的功能 new_a = {k.split('_')[1]:v for k,v in a.iteritems()} {u'11394071':1,u'11052101':1 ,u'11052103 ':1} #應用到功能整套RDD(rdd3) rdd4 = {k.split(' _')[1]:v實現K,v在rdd3.iteritems()} AttributeError的: 「PipelinedRDD」對象有沒有屬性「iteritems」 – Andre
我提到用我的解決方案,你已經收集了RDD到列表之後。要將它們映射到rdd本身,需要知道rdd是如何的。你可以只用take(2)而不是take(1)[1]來發布你的rdd。 – Suresh
這裏是rdd3.take(2)輸出:[{u'bin1_11394071 ':1,u'bin1_11052103':1,u'bin1_11052101 ':1},{u'bin1_11847272':10,u'bin1_999999' :1, u'None_11847272':10}] – Andre