由Disimeter

时间:2017-07-21 22:56:32

标签: python apache-spark pyspark

我是Python和Spark的新手,我试图通过分隔符删除string内的值。我有一个RDD与以下行。

我想删除'_'下划线之前的所有内容,并将剩余的值保留为字符串。我尝试使用下面这样的东西,但失败了。任何帮助都是极好的。谢谢你,如果我错过任何一个菜鸟的话,我会道歉。

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}

1 个答案:

答案 0 :(得分:0)

使用您的输入重新创建rdd,我有

rdd.take(2)
{u'bin1_11394071': 1, u'bin1_11052103': 1, u'bin1_11052101': 1}, {u'bin1_11847272': 1, u'bin1_999999': 1, u'None_11847272': 1}]

new_rdd = rdd.map(lambda x : {k.split('_')[1]:v for k,v in x.iteritems()})
new_rdd.take(2)
[{u'11394071': 1, u'11052101': 1, u'11052103': 1}, {u'999999': 1, u'11847272': 1}]

这里,第二个dict值为'bin1_11847272','None_11847272'作为键。在我们拆分并仅取数字部分之后,它们具有相同的值,并且字典不能有多次出现的密钥。这就是为什么在new_rdd中,我们只有2个值。你必须想出一个逻辑来处理这个问题。