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
您可以使用 DataFrame
在 python 中读取您的 .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")
希望对您有所帮助:)
我有一个具有以下架构的镶木地板文件:
|日期|ID|
我想将其转换为带有制表符分隔符的文本文件,如下所示:
20170403 15284503
我如何在 pyspark 中执行此操作?
在 Spark 2.0+
spark.read.parquet(input_path)
将 parquet 文件读入数据帧。 DataFrameReader
spark.write.csv(output_path, sep='\t')
以制表符分隔的形式写出数据框。 DataFrameWriter
您可以使用 DataFrame
在 python 中读取您的 .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")
希望对您有所帮助:)