宽/稀疏Dataframe持久性

fdx2calv  于 2021-07-13  发布在  Hbase
关注(0)|答案(1)|浏览(513)

我想持久化bigtable一个非常宽的sparkDataframe(>100000列),它是稀疏填充的(>99%的值为null),同时只保留非null值(以避免存储成本)。
有没有办法在spark中指定在写入时忽略空值?
谢谢!

8yoxcaq7

8yoxcaq71#

可能(没有测试),在将sparkDataframe写入hbase/bigtable之前,您可以通过使用自定义函数过滤出每行中具有空值的列来转换它,如下面使用pandas的示例所示:https://stackoverflow.com/a/59641595/3227693. 但是据我所知,没有支持此功能的内置连接器。
或者,您可以尝试将数据存储在类似parquet的列文件格式中,因为它们可以有效地处理稀疏列数据的持久性(至少在以字节为单位的输出大小方面)。但是,为了避免写入许多小文件(由于数据的稀疏性)而降低写入吞吐量,您可能需要在执行写入之前减少输出分区的数量(即每个Parquet文件写入更多行:spark parquet partitioning:大量文件)

相关问题