Dask Impala无法创建分区表,因为拼花文件已损坏

Dask Impala无法创建分区表,因为拼花文件已损坏,dask,parquet,impala,Dask,Parquet,Impala,我正在使用Dask将分区拼花地板文件保存在S3存储桶上,如下所示: dd.to\u拼花地板( dd.from_pandas(df,npartitions=1), path='s3a://测试/拼花', “快速拼花地板”, 分区(国家),, 对象_encoding='utf8', compression=“gzip”, write_index=False, ) 成功创建拼花地板文件;以下是目录结构: 我正在用这个拼花地板成功地制作一张黑斑羚桌子: 创建外部表tmp.countries\u fr

我正在使用Dask将分区拼花地板文件保存在S3存储桶上,如下所示:

dd.to\u拼花地板(
dd.from_pandas(df,npartitions=1),
path='s3a://测试/拼花',
“快速拼花地板”,
分区(国家),,
对象_encoding='utf8',
compression=“gzip”,
write_index=False,
)
成功创建拼花地板文件;以下是目录结构:

我正在用这个拼花地板成功地制作一张黑斑羚桌子:

创建外部表tmp.countries\u france
像拼花地板's3a://test/parquet/\u元数据'
分区依据(国家/地区字符串)
存储为拼花地板位置“s3a://test/parquet/”
以及向该表添加分区:

alter table tmp.countries\u france添加分区(sheet='belgium')
但是,当我从tmp.countries\u france执行
select*时,我得到以下错误:

文件“s3a://test/parquet/sheet=france/part.0.parquet”已损坏:元数据表示行数为零,但至少有一个非空行组

我猜问题来自Dask,因为当我创建一个无分区的拼花地板时,它可以很好地工作。我试过设置
write\u index=True
,但运气不好。

我看不到这一点

df = pd.DataFrame({'a': np.random.choice(['a', 'b', 'c'], size=1000),
                   'b': np.random.randint(0, 64000, size=1000),
                   'c': np.random.choice([True, False], size=1000)})
writer.write(tempdir, df, partition_on=['a', 'c'], file_scheme=scheme)
df = dd.from_pandas(df, npartitions=1)
df.to_parquet('.', partition_on=['a', 'c'], engine='fastparquet')

pf = fastparquet.ParquetFile('_metadata')
pf.count  # 1000
len(pf.to_pandas())  # 1000
pf.row_groups[0].num_rows  # 171

pf = fastparquet.ParquetFile('a=a/c=False/part.0.parquet')
pf.count # 171
pf.row_groups[0].num_rows  # 171
显然,我无法说明黑斑羚可能在做什么,但也许“like”机制希望在
\u元数据
文件中找到数据


请注意,熊猫可以使用相同的选项在没有dask的情况下与拼花地板进行写操作。

这里的错误是正确设置了
num_rows
字段?似乎不是,它会在fastparquet上记录错误。