.csvファイルを.parquetファイルに変換しようとしています。
csvファイル(Temp.csv
)の形式は次のとおりです
1,Jon,Doe,Denver
次のpythonコードを使用して、寄木細工に変換しています
from pyspark import SparkContext
from pyspark.sql import SQLContext
from pyspark.sql.types import *
import os
if __name__ == "__main__":
sc = SparkContext(appName="CSV2Parquet")
sqlContext = SQLContext(sc)
schema = StructType([
StructField("col1", IntegerType(), True),
StructField("col2", StringType(), True),
StructField("col3", StringType(), True),
StructField("col4", StringType(), True)])
dirname = os.path.dirname(os.path.abspath(__file__))
csvfilename = os.path.join(dirname,'Temp.csv')
rdd = sc.textFile(csvfilename).map(lambda line: line.split(","))
df = sqlContext.createDataFrame(rdd, schema)
parquetfilename = os.path.join(dirname,'output.parquet')
df.write.mode('overwrite').parquet(parquetfilename)
結果は、output.parquet
という名前のフォルダーのみで、探している寄木細工のファイルではなく、コンソールに次のエラーが続きます。
また、次のコードを実行して、同様の問題に直面しようとしました。
from pyspark.sql import SparkSession
import os
spark = SparkSession \
.builder \
.appName("Protob Conversion to Parquet") \
.config("spark.some.config.option", "some-value") \
.getOrCreate()
# read csv
dirname = os.path.dirname(os.path.abspath(__file__))
csvfilename = os.path.join(dirname,'Temp.csv')
df = spark.read.csv(csvfilename)
# Displays the content of the DataFrame to stdout
df.show()
parquetfilename = os.path.join(dirname,'output.parquet')
df.write.mode('overwrite').parquet(parquetfilename)
最善の方法は?ウィンドウを使用して、python 2.7。
パッケージpyarrow
およびpandas
を使用すると、バックグラウンドでJVMを使用せずにCSVをParquetに変換できます。
import pandas as pd
df = pd.read_csv('example.csv')
df.to_parquet('output.parquet')
実行する際の制限の1つは、pyarrow
がWindows上のPython 3.5+でのみ使用できることです。 Linux/OSXを使用してPython 2としてコードを実行するか、WindowsセットアップをPython 3.6にアップグレードします。
import boto3
import pandas as pd
import pyarrow as pa
from s3fs import S3FileSystem
import pyarrow.parquet as pq
s3 = boto3.client('s3',region_name='us-east-2')
obj = s3.get_object(Bucket='ssiworkoutput', Key='file_Folder/File_Name.csv')
df = pd.read_csv(obj['Body'])
table = pa.Table.from_pandas(df)
output_file = "s3://ssiworkoutput/file/output.parquet" # S3 Path need to mention
s3 = S3FileSystem()
pq.write_to_dataset(table=table,
root_path=output_file,partition_cols=['Year','Month'],
filesystem=s3)
print("File converted from CSV to parquet completed")