将列表 unicode 值的 rdd 列表转换为字符串
Posted
技术标签:
【中文标题】将列表 unicode 值的 rdd 列表转换为字符串【英文标题】:converting rdd list of list unicode values into string 【发布时间】:2017-10-11 08:08:25 【问题描述】:我有一个 spark rdd,它的 unicode 值作为列表列表:
ex_rdd.take(5)
[[u'70450535982412348', u'1000000923', u'1'],
[u'535982417348', u'1000000923', u'1'],
[u'50535929459899', u'1000000923', u'99'],
[u'8070450535936297811', u'1000000923', u'1'],
[u'5937908667', u'1000000923', u'1']]
要将它们写入 hdfs 文件,它会给出unicode error
。如何将它们转换为字符串并在 pyspark 中有效地将它们写入文件? hdfs 输出文件应如下所示 -
70450535982412348,1000000923,1
535982417348,1000000923,1
等等
【问题讨论】:
您可以尝试对它们进行编码吗? ex_rdd.map(lambda x:[y.encode('utf-8') for y in x]) 是的,这是可以做到的,但是由于文件很大,所有的值都没有效率 【参考方案1】:您可以对字符串使用 Python 的 join
函数,以及对 pyspark.RDD 对象的 map
和 saveAsTextFile
操作(请参阅文档 here)。
ex_rdd.map(lambda L: ','.join(L)).saveAsTextFile('/path/to/hdfs/save/file')
如果我没记错的话,这应该可以在 PySpark 的早期版本 (>= 1.0) 上使用。
我不确定您所说的“unicode error
”是什么意思。这是 Python 中的一个例外吗?或者这是 Java 内部的一个例外?
【讨论】:
以上是关于将列表 unicode 值的 rdd 列表转换为字符串的主要内容,如果未能解决你的问题,请参考以下文章
为啥 list 应该先转换为 RDD 再转换为 Dataframe?有啥方法可以将列表转换为数据框?
将Unicode列表转换为包含Python字符串的列表的简单方法?