Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PySpark RDD列表按Delimeter拆分_Python_Apache Spark_Pyspark - Fatal编程技术网

Python PySpark RDD列表按Delimeter拆分

Python PySpark RDD列表按Delimeter拆分,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,我对Python和Spark都非常陌生,我正试图用分隔符删除字符串中的值。我有一个RDD,有以下几行 我想删除下划线“u”之前的所有内容,只保留剩余的值作为字符串。我试着使用下面这样的东西,但失败了。任何帮助都会很棒。谢谢你,如果我漏掉了什么话,我向你道歉 a.split('_') File "<stdin>", line 1, in <module> AttributeError: 'dict' object has no attribute 'split' # Pr

我对Python和Spark都非常陌生,我正试图用分隔符删除
字符串中的值。我有一个RDD,有以下几行

我想删除下划线“u”之前的所有内容,只保留剩余的值作为字符串。我试着使用下面这样的东西,但失败了。任何帮助都会很棒。谢谢你,如果我漏掉了什么话,我向你道歉

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}
a.split(“”)
文件“”,第1行,在
AttributeError:“dict”对象没有属性“split”
#最好是这样:
#以前
a=rdd.take(1)[1]
A.
{u'bin1_11394071':1,u'bin1_11052103':1,u'bin1_11052101':1}
#之后
新课程(1)[1]
纽约大学
{u'11394071':1,u'11052103':1,u'11052101':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个值。你必须想出一个逻辑来处理这个问题。

Hey@Suresh,我尝试了上面的代码,当我在一条记录上使用它时,它是有效的,但我想对RDD中的每条记录都这样做。我将显示代码和错误测试函数a=rdd3的RDD示例1记录。取(1)[0]#测试1记录{u'bin1_11394071':1,u'bin1_11052103':1,u'bin1_11052101':1}你的函数new#a={k.split('[1]:v代表k,v在a.iteritems()中{u'11394071':1,u'11052101':1,u'11052103':1#应用于整个函数){d41]:v代表k,在rdd3.iteritems()中为v}AttributeError:'PipelinedRDD'对象没有属性'iteritems',在您将rdd收集到列表中后,我使用我的解决方案提到过。要将它们映射到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_99999':1,u'None_11847272':10}有办法将该值保留为字符串吗?这会保留两种价值观吗?非常感谢你的帮助!我承认。分割后它已经是字符串格式了。如果您不需要该字符串的第一部分,那么为什么不能合并这些值呢。