【问题标题】:PySpark RDD List Split by DelimeterPySpark RDD 列表按分隔符拆分
【发布时间】:2017-07-24 14:33:43
【问题描述】:

我对 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}

【问题讨论】:

    标签: python apache-spark pyspark


    【解决方案1】:

    使用您的输入重新创建 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 个值。你必须想出一个逻辑来处理这个。

    【讨论】:

    • 嘿@Suresh,我尝试了上面的代码,当我在单个记录上使用它时它可以工作,但我想对RDD中的每条记录都这样做。我将显示代码和错误。 # 测试 RDD 的 1 条记录 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} # Apply to Function Entire RDD (rdd3) rdd4 = {k.split('')[1]:v for k,v in rdd3.iteritems()} AttributeError: 'PipelinedRDD' object has no attribute 'iteritems'
    • 我提到使用我的解决方案,在您将 rdd 收集到 list 之后。要将它们映射到 rdd 本身,需要知道 rdd 是如何的。你可以只用 take(2) 而不是 take(1)[1] 发布你的 rdd。
    • 这里是 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}]
    • 有没有办法将该值保留为字符串?这会保留两个值吗?非常感谢所有的帮助!我会给予信任。
    • 拆分后已经是字符串格式了。如果您不需要该字符串中的第一部分,那么为什么不能组合这些值。
    猜你喜欢
    • 2018-06-18
    • 2018-03-12
    • 1970-01-01
    • 2011-06-09
    • 2019-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    相关资源
    最近更新 更多