如何将列表保存到spark中?

时间:2016-12-26 12:58:31

标签: python apache-spark pyspark rdd

我已阅读this SO post,但我仍需要随机。

我有数据集,如下所示:

123456789
23458ef12
ef12345ea
111223345

我想从中得到一些乱序线,所以我写下来的pyspark代码:

rdd = spark_context.textFile('a.tx').takeSample(False, 3)
rdd.saveAsTextFile('b.tx')

所以takeSample在列表中返回,它会有一个错误:

'list' object has no attribute 'saveAsTextFile'

2 个答案:

答案 0 :(得分:5)

takeSample()返回数组。你需要并行化并保存它。

rdd = spark_context.textFile('a.tx')
spark_context.parallelize(rdd.takeSample(False, 3)).saveAsTextFile('b.tx')

但最好的方式是sample(),它将返回 RDD

rdd.sample(False, 0.3).saveAsTextFile('b.tx')

答案 1 :(得分:0)

如果您需要从纯python列表开始;例如在pyspark数据帧上调用.collect()的结果上,我具有以下功能

def write_lists_to_hdfs_textfile(ss, python_list, hdfs_filename):
    '''
    :param ss : SparkSession Object
    :param python_list: simple list in python. Can be a result of .collect() on pyspark dataframe.
    :param hdfs_filename : the path of hdfs filename to write
    :return: None
    '''

    # First need to convert the list to parallel RDD
    rdd_list = ss.sparkContext.parallelize(python_list)

    # Use the map function to write one element per line and write all elements to a single file (coalesce)
    rdd_list.coalesce(1).map(lambda row: str(row)).saveAsTextFile(hdfs_filename)

    return None

例如:

write_lists_to_hdfs_textfile(ss,[5,4,1,18],"/test_file.txt")