我正在使用以下python脚本从CSV文件创建一个镶木地板文件:
import pandas as pd
import pyarrow as pa
import pyarrow.parquet as pq
csv_file = '~/Desktop/SWA_UK_Pickup_Forecast_HOURLY_M1_at_2017-11-28-04_20_21-UTC_from_28-Nov-2017_to_28-Nov-2017.csv'
chunksize = 10
csv_stream = pd.read_csv(csv_file, sep=',', chunksize=chunksize, low_memory=False)
for i, chunk in enumerate(csv_stream):
if i == 0:
parquet_schema = pa.Table.from_pandas(df=chunk).schema
parquet_writer = pq.ParquetWriter('/Users/kohujwal/Desktop/parquet_forecast_file.parquet', parquet_schema, compression='snappy')
table = pa.Table.from_pandas(chunk, schema=parquet_schema);
parquet_writer.write_table(table)
parquet_writer.close();
然后我手动将其上传到某个s3位置,并在Athena上创建一个表格。用于创建表的查询:
CREATE EXTERNAL TABLE IF NOT EXISTS forecast_report_lom_parquet (
`forecast_week` int,
`for_date` string,
`forecast_day_of_week` string,
`merchant_id` string,
`shipper_account_id` string,
`shipper_name` string,
`node_id` string,
`routing_preference` string,
`forecast_shipment_count` int,
`forecast_pallet_count` int,
`forecast_volume` double )
STORED AS PARQUET
LOCATION 's3://prevoir-athena-input-prod/spike-computation/forecast-reports/parquet/live-order-model/'
tblproperties ("parquet.compress"="SNAPPY")
表已成功创建,但是当我尝试查询表时,它不会显示内容。它只显示行和列名称的索引。这是CSV和parquet file。镶木桌上的查询:
SELECT * FROM prevoir_prod.forecast_report_lom_parquet
我在控制台上看到的
有谁可以指出这里出了什么问题?
答案 0 :(得分:0)
您的结果显示行号。这意味着Athena在S3上找到文件,并将其解析到识别行的位置。
Athena(或更确切地说,ParquetSerDe)似乎无法从您的文件中获取列。这表明CREATE EXTERNAL TABLE
语句和实际文件之间不匹配。一些可能性:
每当我有一个无法创建表的文件时,我都会使用Glue搜寻器检查并构建创建的DDL。效果很好,很简单,并且节省了大量的试验和错误。