【问题标题】:Spark HBase/BigTable - Wide/sparse dataframe persistenceSpark HBase/BigTable - 宽/稀疏数据帧持久性
【发布时间】:2021-04-15 06:10:35
【问题描述】:

我想将一个非常宽的 Spark Dataframe(>100,000 列)持久保存到 BigTable,该数据框填充稀疏(>99% 的值为空),同时仅保留非空值(以避免存储成本)。

有没有办法在 Spark 中指定在写入时忽略空值?

谢谢!

【问题讨论】:

  • @Igor Dvorzhak:谢谢。我想避免保留空值(在一行或一列中)不排除整个行或列,这是链接所暗示的,并且意味着数据丢失。
  • 感谢您的澄清,更新了我的答案。
  • @IgorDvorzhak:谢谢。因此,您建议在每次应用列修剪时将 Spark 数据逐行写入 BigTable 中?没有一些价值修剪的批处理方式? Parquet 的提示是受欢迎的,但在我们讨论 BigTable 时超出了这里的范围;)
  • @IgorDvorzhak:我对您的回答做了一些修改。如果不行,请告诉我。

标签: apache-spark hbase sparse-matrix google-cloud-dataproc google-cloud-bigtable


【解决方案1】:

可能(没有测试过),在将 Spark DataFrame 写入 HBase/BigTable 之前,您可以通过使用自定义函数过滤掉每行中具有空值的列来转换它,如此处建议的使用 pandas 的示例:@987654321 @。但是,据我所知,没有支持此功能的内置连接器。

或者,您可以尝试以 Parquet 等列文件格式存储数据,因为它们是 efficiently handle persistence of sparse columnar data(至少在输出大小方面,以字节为单位)。但是为了避免写入许多会降低写入吞吐量的小文件(由于数据的稀疏性),您可能需要在执行写入之前减少输出分区的数量(即每个 parquet 文件写入更多行:Spark parquet partitioning : Large number of files)

【讨论】:

  • 很高兴收到社区关于可用内置方法的消息!
猜你喜欢
  • 2021-04-14
  • 2017-08-30
  • 2022-12-17
  • 2016-01-26
  • 1970-01-01
  • 2021-03-07
  • 2021-11-02
  • 1970-01-01
  • 2017-06-15
相关资源
最近更新 更多