J'essaie de convertir un fichier .csv en un fichier .parquet.
Le fichier csv (Temp.csv
) a le format suivant
1,Jon,Doe,Denver
J'utilise le code python suivant pour le convertir en parquet
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)
Le résultat est uniquement un dossier nommé, output.parquet
et non un fichier de parquet que je recherche, suivi de l’erreur suivante sur la console.
J'ai également essayé d'exécuter le code suivant pour faire face à un problème similaire.
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)
Comment le mieux faire? En utilisant windows, python 2.7.
En utilisant les packages pyarrow
et pandas
, vous pouvez convertir des CSV en Parquet sans utiliser de machine virtuelle en arrière-plan:
import pandas as pd
df = pd.read_csv('example.csv')
df.to_parquet('output.parquet')
Une limitation dans laquelle vous allez exécuter est que pyarrow
est uniquement disponible pour Python 3.5+ sous Windows. Utilisez soit Linux/OSX pour exécuter le code ainsi Python 2 ou mettez à niveau votre configuration Windows vers 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")