这是我到目前为止所做的工作我正在使用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字符串)因此我收到错误的原因。有一个很好的解决方案吗?
答案 0 :(得分:4)
如果您的RDD具有元组结构,则可以使用collectAsMap
操作从RDD获取键值对作为字典。
以下内容应该有效:
>>>> xDict = x.collectAsMap()
>>>> xDict["a key"]