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