当我尝试做以下简单的事情时,我感到很愚蠢:我正在使用dataset / databricks-datasets / cs110x / ml-1m / data-001,其中包含3个带有关于用户,电影的信息的dat文件和他们的评级。
RDD就像10个条目的样本:
[u'1::F::1::10::48067',
u'2::M::56::16::70072',
u'3::M::25::15::55117',
u'4::M::45::7::02460',
u'5::M::25::20::55455',
u'6::F::50::9::55117',
u'7::M::35::1::06810',
u'8::M::25::12::11413',
u'9::M::25::17::61614',
u'10::F::35::1::95370']
我试图取代似乎是分隔符' ::'另一方面,将M替换为1,将F替换为0,这是性别。
myRDD.map(lambda x: x.replace('::',',')).map(lambda x: x.replace('M','0')).map(lambda x: x.replace('F','1'))
但它没有做任何事情,我得到相同的RDD没有任何变化没有错误。是否有一种调试器可以看看幕后发生了什么?这个简单的事情让我发疯。知道我做错了什么吗?如果我采用RDD的1个元素,它可以工作。 感谢
答案 0 :(得分:0)
你的代码工作正常,但你必须记住它是懒惰的:
>>> myRDD = sc.parallelize([u'1::F::1::10::48067',
... u'2::M::56::16::70072',
... u'3::M::25::15::55117',
... u'4::M::45::7::02460',
... u'5::M::25::20::55455',
... u'6::F::50::9::55117',
... u'7::M::35::1::06810',
... u'8::M::25::12::11413',
... u'9::M::25::17::61614',
... u'10::F::35::1::95370'])
...
>>> transformedRDD = myRDD.map(lambda x: x.replace('::',',')).map(lambda x: x.replace('M','0')).map(lambda x: x.replace('F','1'))
>>>
>>> for x in transformedRDD.collect():
... print(x)
...
1,1,1,10,48067
2,0,56,16,70072
3,0,25,15,55117
4,0,45,7,02460
5,0,25,20,55455
6,1,50,9,55117
7,0,35,1,06810
8,0,25,12,11413
9,0,25,17,61614
10,1,35,1,95370
>>>
通常你不会收集但是会调用其中一个分布式操作。我强烈建议您在开始编写自己的程序之前熟悉the programming guide。