将rdd转换为PySpark中的本地字典

时间:2016-06-30 04:15:09

标签: apache-spark pyspark

这是我到目前为止所做的工作我正在使用PySpark读取csv文件:

x = sc.textFile("file:///tmp/data.csv").map(lambda l: l.split(',')).map(clean)

Clean只是一个函数clean,它删除了非ascii字符,因为我导入的字符串被包含在u'中,就像你在''这是一个字符串“'。我已经解析了它并以“这是一个字符串”的形式出现。我自己写了这个函数(我不知道是否有一种更有效的方法来做到这一点,因为我对Python很新,但有PySpark无法处理的非ascii字符。我正在使用PySpark 2.6.6附带hortonworks沙箱。

现在我的问题是我试图把它放在字典结构中。它应该适合内存,所以我尝试.collectAsDict()但我收到了运行时错误。

键只是字符串(虽然是unicode字符串)因此我收到错误的原因。有一个很好的解决方案吗?

1 个答案:

答案 0 :(得分:4)

如果您的RDD具有元组结构,则可以使用collectAsMap操作从RDD获取键值对作为字典。

以下内容应该有效:

>>>> xDict = x.collectAsMap()
>>>> xDict["a key"]