【问题标题】:Can we define cols on the fly in Cassandra?我们可以在 Cassandra 中动态定义 cols 吗?
【发布时间】:2017-08-30 05:27:52
【问题描述】:

我在 Spark Dataframe 中有一个嵌套的 json 对象,需要存储在 Cassandra 中。我是 Spark Streaming 和 Cassandra 的新手,想了解以下内容:

  1. 是否必须展平?我需要访问各个列进行处理 - 如何展平嵌套的 json?
  2. 我知道 Cassandra 的早期版本(在权威指南中)是无模式的,现在还是这样吗?这意味着如果第一行带有 10 个列,它会动态创建这些列,如果第二行只有 2 个列值(意味着其他列没有出现在传入的 json 中),那么该行将只保存 2 个列。或者我需要在存储之前处理空值吗?

【问题讨论】:

    标签: cassandra spark-dataframe spark-streaming


    【解决方案1】:
    1. 我知道 Cassandra 的早期版本(在权威指南中)是无模式的,现在还是这样吗?

    尽管 CQL 需要静态架构,但在内部,CQL 分区是一个宽行,您可以使用集群键动态添加列。请参阅this answerthis explanation

    【讨论】:

      【解决方案2】:

      1:您可以将整个JSON文档放入一列文本数据类型中;您也可以尝试从JSON中映射更多的字段,将它们转换为平面对象并构造一个映射,也可以进行索引。与 Cassandra 一样 - 您必须根据需要的查询来设计模型。

      2:表的结构是严格定义的,您不能轻松地将任意列添加到行中。您必须更改整个 CF/表才能做到这一点。另一方面,动态列完全由 CQL3 支持 聚类列(宽行)。所以水平添加一列是不可能的 但垂直是的。

      从 JSON 值映射中省略的列将被视为空插入(如果现有值存在,则会导致现有值被删除)。

      【讨论】:

      • 谢谢!对于第 1 点。我添加了更多信息。我需要展平一个嵌套的json,它可以有动态的行数(每次都不需要在结构中的数组中的值相同)我尝试了“爆炸”,但这只会爆炸我指定的列,而在我的最终数据框中我需要所有列(大约 500 个)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多