【问题标题】:pyspark in databricks - replace delimiters and string for every element in RDD at one shotdatabricks 中的 pyspark - 一次性替换 RDD 中每个元素的分隔符和字符串
【发布时间】:2018-01-14 20:59:15
【问题描述】:

尝试执行以下简单的操作时,我感到很愚蠢:我正在使用数据集 /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 个元素,它就可以工作。 谢谢

【问题讨论】:

    标签: pyspark rdd


    【解决方案1】:

    您的代码运行良好,但您必须记住它是懒惰的:

    >>> 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

    【讨论】:

    • 非常感谢。你完全正确,我需要查看该指南。我粘贴了你的代码,它对我有用,之后我决定检查你的 RDD 和我的 RDD 之间的区别。你的是,在我的例子中是。在我的情况下做同样的事情对我不起作用。
    • 好的,我明白了。比方说,当我运行转换命令时,什么都没有打印出来。这是你说的“懒惰”的部分。我需要进行转型吗?
    • 这里的另一个区别是myRDD.map(...) 不会改变myRDD - 它返回一个新对象。在此解决方案中,transformedRDD 被打印,但如果您打印 myRDD,它不会改变。也许这是你的问题。
    猜你喜欢
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 2023-02-25
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多