一尘不染

从文本文件存储/读取后,如何恢复(键,值)对的RDD

python

我使用saveAsTextFile将(键,值)对的RDD保存到文本文件中。使用sc.textFile("filename.txt")命令读回文本文件后,我得到的是字符串而不是(键,值)对。我的键以前是字符串,值是浮点列表。这是一个例子:

(u'ALM_0', [98.0, 110.0, 104.0, 6.0, 208.0, -262.0, 136.0, -204.67395833333333, 45.362440283766297, -196487.0, 1.0, 4.0, 2.5, 1.1180339887498949, 10.0, -46.0, 261.0, -3.6343749999999999])

如何轻松地将此字符串转换为(键,值)对?是否有Spark read命令可以在读取时执行此命令?

我正在使用Python接口连接Spark。


阅读 216

收藏
2021-01-20

共1个答案

一尘不染

ast.literal_eval
应该做到这一点:

import ast

data1 = [(u'BAR_0', [1.0, 2.0, 3.0]), (u'FOO_1', [4.0, 5.0, 6.0])]
rdd = sc.parallelize(data1)
rdd.saveAsTextFile("foobar_text")

data2 = sc.textFile("foobar_text").map(ast.literal_eval).collect()
assert sorted(data1) == sorted(data2)

但总的来说,最好首先避免这种情况,并使用例如SequenceFile

rdd.saveAsPickleFile("foobar_seq")
sc.pickleFile("foobar_seq")
2021-01-20