将pyspark df写入专用格式的文件

osh3o9ms  于 2021-06-01  发布在  Hadoop
关注(0)|答案(1)|浏览(408)

我正在使用PySpark2.1,我需要想出一种方法来将我的Dataframe写入一个特殊格式的.txt文件;所以不是典型的json或csv,而是ctf格式(对于cntk)。
文件不能有额外的括号或逗号等。格式如下:

|label val |features val val val ... val
|label val |features val val val ... val

一些代码可能如下所示:

l = [('Ankit',25),('Jalfaizy',22),('saurabh',20),('Bala',26)]
rdd = sc.parallelize(l)
people = rdd.map(lambda x: Row(name=x[0], age=int(x[1]))).toDF()
people.show(n=4)

def Convert_to_String(r):
    return '|label ' + r.name + ' ' + '|features ' + str(r.age) + '\n'

m_p = people.rdd.map(lambda r: Row(Convert_to_String(r)) ).toDF()
m_p.show(n=3)

在上面的示例中,我只想将每行中的每个字符串附加到一个文件中,而不需要任何额外的字符。
实际Dataframe比较大;它很可能可以被分割成多个文件;但如果结果是一个文件,那就更好了。
任何见解都很有帮助。
谢谢!

mec1mxoz

mec1mxoz1#

将我的评论转换为答案。
而不是将每条记录转换为 Row 打电话来 toDF() ,只需将每条记录Map到一个字符串。那就打电话 saveAsTextFile() .

path = 'path/to/output/file'

# depending on your data, you may need to call flatMap

m_p = people.rdd.flatMap(lambda r: Convert_to_String(r))

# now m_p will contain a list of strings that you can write to a file

m_p.saveAsTextFile(path)

您的数据可能存储在多个文件中,但您可以从命令行将它们连接在一起。命令如下所示:

hadoop fs -cat path/to/output/file/* > combined.txt

相关问题