Pyspark - 如何将镶木地板文件转换为带分隔符的文本文件

Pyspark - How can I convert parquet file to text file with delimiter

我有一个具有以下架构的镶木地板文件:

|日期|ID|

我想将其转换为带有制表符分隔符的文本文件,如下所示:

20170403 15284503

我如何在 pyspark 中执行此操作?

在 Spark 2.0+

spark.read.parquet(input_path)

将 parquet 文件读入数据帧。 DataFrameReader

spark.write.csv(output_path, sep='\t')

以制表符分隔的形式写出数据框。 DataFrameWriter

您可以使用 DataFramepython 中读取您的 .parquet 文件并使用 list 数据结构,将其保存在文本文件中。示例代码在这里: 此代码读取 spark mllib WordEmbeddings class.parquet 文件中输出的 word2vec(词到向量)并将其转换制表符分隔符 .txt file.

import pandas as pd
import pyarrow.parquet as pq
import csv

data = pq.read_pandas('C://...//parquetFile.parquet', columns=['word', 'vector']).to_pandas()
df = pd.DataFrame(data)

vector = df['vector'].tolist()

word = df['word']
word = word.tolist()

k = [[]]
for i in range(0, word.__len__()):
    l = []
    l.append(word[i])
    l.extend(vector[i])
    k.append(l)

#you can not save data frame directly to .txt file.
#so, write df to .csv file at first
with open('C://...//csvFile.csv', "w", encoding="utf-8") as f:
    writer = csv.writer(f)
    for row in k:
        writer.writerow(row)


outputTextFile = 'C://...//textFile.txt'

with open(outputTextFile, 'w') as f:
    for record in k:
        if (len(record) > 0):
            for element in record:
                #tab delimiter elements
                f.write("%s\t" % element)
            f.write("%s" % element)
            #add enter after each records
            f.write("\n")

希望对您有所帮助:)