我已阅读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'
答案 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")