Конвертировать CSV в файл паркета с помощью Python - PullRequest
0 голосов
/ 30 мая 2018

Я пытаюсь преобразовать файл .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, а не файл партера, который я ищу, после чего на консоли появится следующая ошибка.

CSV to Parquet Error

Я также попытался запустить следующий код для решения аналогичной проблемы.

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)

Как лучше всего это сделать?Использование windows, python 2.7.

Ответы [ 2 ]

0 голосов
/ 30 мая 2019
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")
0 голосов
/ 30 мая 2018

Используя пакеты pyarrow и pandas, вы можете конвертировать CSV в Parquet без использования JVM в фоновом режиме:

import pandas as pd
df = pd.read_csv('example.csv')
df.to_parquet('output.parquet')

Одно ограничение, в котором вы будете работать, состоит в том, что pyarrow толькодоступно для Python 3.5+ на Windows.Либо используйте Linux / OSX для запуска кода как Python 2, либо обновите настройки Windows до Python 3.6.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...