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")
Я надеюсь, что это помогает:)