将列表 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 对象的 mapsaveAsTextFile 操作(请参阅文档 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?有啥方法可以将列表转换为数据框?

将RDD的每一行中的键值对列表转换为每行中的单个键值

将Unicode列表转换为包含Python字符串的列表的简单方法?

pyspark:获取列表值的不同元素

如何对 spark scala RDD 中的元组列表/数组执行转换?

将 Python 列表值的平均值转换为另一个列表