Pyspark - Как я могу преобразовать файл паркета в текстовый файл с разделителем

У меня есть паркетный файл со следующей схемой:

| ДАТА |ID|

Я хотел бы преобразовать его в текстовый файл с разделителями табуляции следующим образом:

20170403 15284503

Как я могу сделать это в pyspark?

1 ответ

Решение

В Spark 2.0+

spark.read.parquet(input_path)

прочитать файл паркета в информационном кадре. DataFrameReader

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

записать данные в виде табуляции с разделителями. DataFrameWriter

Вы можете прочитать свой файл .parquet в Python, используяDataFrame и с использованием listструктуру данных, сохраните ее в текстовом файле. Пример кода находится здесь: этот код считывает word2vec (слово в вектор), которое является выводом класса Spark mllib WordEmbeddings в файле .parquet, и преобразует его в файл .txt с разделителями табуляции.

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")

Я надеюсь, что это помогает:)

Другие вопросы по тегам