【问题标题】:Error Appending to Parquet File Using Dask Dataframe使用 Dask Dataframe 附加到 Parquet 文件时出错
【发布时间】:2021-04-07 01:44:38
【问题描述】:

我是 Dask 的新手,我正在尝试追加到 parquet 文件....但我的代码始终覆盖文件的内容?

有什么想法我在这里做错了吗?

print("Write dataframe 1...")
df = pd.DataFrame({'DeptId': [1, 2, 3], 'DName': ['Accounting', 'Sales', 'Finance'], 'DeptNo': [100, 200, 300]})
df.set_index(['DeptId'], inplace=True)
ddf = dd.from_pandas(df, chunksize=1000)
print(ddf.head(3))
file_name = 'C:/Temp/xxx'
ddf.to_parquet(path=file_name, engine="pyarrow")

print("\nAppend dataframe 2...")
df2 = pd.DataFrame({'DeptId': [4, 5, 6], 'DName': ['Engineering', 'Support', 'Consulting'],
                    'DeptNo': [400, 500, 600]})
df2.set_index(['DeptId'], inplace=True)
ddf2 = dd.from_pandas(df2, chunksize=1000)
print(ddf2.head(3))
ddf2.to_parquet(path=file_name, engine="pyarrow", ignore_divisions=True, append=True, overwrite=False)

print("\nResulting parquet file...")
ddf3 = dd.read_parquet(path=file_name, engine="pyarrow")
print(ddf3.head()) 

输出如下...

  • 写入数据帧 1...
             DName  DeptNo
DeptId                    
1       Accounting     100
2            Sales     200
3          Finance     300
  • 附加数据帧 2...
              DName  DeptNo
DeptId                     
4       Engineering     400
5           Support     500
6        Consulting     600
  • 生成的镶木地板文件...
              DName  DeptNo
DeptId                     
4       Engineering     400
5           Support     500
6        Consulting     600
  • 我正在使用这个版本
python  3.8.8
dask    2020.3.1
pandas  1.2.3
pyarrow 3.0.0

问候

马克R

【问题讨论】:

    标签: python dask dask-dataframe


    【解决方案1】:

    每个文件都将作为单独的分区加载,因此当您运行.head() 时,它将仅在第一个分区中查找值。在您的情况下,您想查看所有观察结果,因此请尝试以下选项之一:

    print(ddf3.head(npartitions=2)) # note this will show only first 5 rows
    
    # or
    
    print(ddf3.head(6, npartitions=2)) # this will show first 6 rows (all of the sample data)
    
    # or
    
    print(ddf3.compute()) # another way to see all of the sample data
    

    【讨论】:

    • 苏丹,感谢您的反馈。我尝试了所有建议,但没有任何运气。我认为问题出在第二次写入(即追加)到镶木地板文件中?
    • 这很奇怪。我从字面上复制粘贴了您的代码(我的库版本与您的相同)并在最后附加了我的 sn-p,我看到了正确的输出。唯一的区别是我在 Mac 上,而你似乎在 Windows...
    • 我今天早些时候有一个好主意,我将第一个 to_parquet 语句更改为包含 append=True 参数,它成功了! ` ddf.to_parquet(path=file_name, engine="pyarrow", ignore_divisions=True, append=True, overwrite=False) ` 现在可以工作了,read_parquet 语句返回 6 条记录。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2011-10-29
    • 2018-12-13
    • 2021-06-22
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-28
    相关资源
    最近更新 更多