【问题标题】:RDD JoinWithCassandraTable Join ColumnsRDD JoinWithCassandraTable 连接列
【发布时间】:2016-10-17 10:13:03
【问题描述】:

RDD1.joinWithCassandraTable("keyspace", "Tableabc", SomeColumns("lines"), SomeColumns("col1", "col2", "col3"))

以上是在 Cassandra 中将 RDD1 与表连接起来的语法。其中 col1,col2,col3 是用于与 RDD1 连接的列

我有如下要求。 Tableabc 有一个名为“lines”的列,其数据类型为“list”。 此行列有 4 列,如下所示。

行:{cola: 22,colb: hello,colc: sri,cold: 123}

基本上它是一个 json 对象。

现在,如果您看到我上面的语法,我使用了 SomeColumns("lines")。我可以得到如下 RDD 的输出。

(RDD1columns,CassandraRow{lines: [{cola: 22,colb: hello,colc: sri,cold:123}]})

但我需要的是我只想选择“可乐”,我不需要行中的所有列。

任何人都可以帮助我吗?

【问题讨论】:

  • 我尝试使用 RDD1.joinWithCassandraTable("keyspace", "Tableabc", SomeColumns("lines.cola"), SomeColumns("col1", "col2", "col3"))
  • 我收到类似lines.cola 的错误消息不存在。
  • 得到json后可以使用map解析json得到可乐

标签: apache-spark cassandra apache-spark-sql


【解决方案1】:

JoinWithCassandraTable 在数据库上调用直接连接,并且只能在连接分区键时使用。如果您想加入分区键的一部分,则需要进行全面扫描。

这意味着不可能对任何集合列进行 JWCT。

lines 有键:值对时,它又是怎样的一个列表?

如果你只想要行中的“可乐”值,你可以做一个地图

RDD1.joinWithCassandraTable().map(_._2.get[Map[String, AnyRef]](lines).get("cola"))

【讨论】:

    猜你喜欢
    • 2016-10-06
    • 1970-01-01
    • 2014-11-16
    • 2015-11-19
    • 2015-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-27
    相关资源
    最近更新 更多