Dictionary DSE cassandra和spark地图集合类型:如何执行get操作

Dictionary DSE cassandra和spark地图集合类型:如何执行get操作,dictionary,collections,cassandra,apache-spark,Dictionary,Collections,Cassandra,Apache Spark,例如,我有一个名为“example”的下表: 在Spark中,我可以这样做: scala>val test=sc.cassandraTable(“测试”、“示例”) 这是: scala>test.first.getString 这是: scala>test.first.getMapString,字符串 它以地图的形式给出了地址的所有字段 问题1:但我如何使用“获取”来访问“城市”信息? 问题2:有没有办法让整个桌子都坐满? 问题3:如何计算“city”=“kl”的行数 谢谢问题3:我们如何计算c

例如,我有一个名为“example”的下表:

在Spark中,我可以这样做:

scala>val test=sc.cassandraTable(“测试”、“示例”)

这是:

scala>test.first.getString

这是:

scala>test.first.getMapString,字符串

它以地图的形式给出了地址的所有字段

问题1:但我如何使用“获取”来访问“城市”信息? 问题2:有没有办法让整个桌子都坐满? 问题3:如何计算“city”=“kl”的行数

谢谢

问题3:我们如何计算city==某物的行数 我将首先回答3,因为这可能为您提供处理数据的更简单方法。差不多

sc.cassandraTable[(String,Map[String,String],Int)]("test","example")
 .filter( _._2.getOrElse("city","NoCity") == "kl" )
 .count
首先,我在
cassandraTable
调用中使用类型参数
[(String,Map[String,String],Int)]
将行转换为元组。这让我无需任何施法就可以轻松访问地图。(顺序就是我在测试环境中创建表时的显示方式,您可能需要更改顺序)

第二,我说我想根据
.\u2
进行过滤,这是传入元组的第二个元素的缩写
getOrElse
如果键存在,则返回键“city”的值,否则返回键“NoCity”的值。最后的等价性检查它是哪个城市

最后,我调用
count
查找城市中的条目数

1我们如何访问地图? 因此,2的答案是,一旦有了映射,就可以调用get(“key”)或getOrElse(“key”)或任何标准Scala操作来从映射中获取值

2如何展平整张桌子。 根据你所说的“扁平化”的意思,这可以是多种多样的事情。例如,如果您想将整个表作为数组返回给驱动程序(不推荐,因为您的RDD在生产中应该非常大)。您可以调用
collect


如果您想将地图的元素展平为一个元组,您可以随时执行类似于调用
toSeq
这样的操作,最终得到一个
(键,值)
元组列表。如果我还没有用“展平”回答您的问题,请随意提问。

谢谢您的回答。然而,当我使用它时,只是一个跟进:
.filter(u.\u 2.getOrElse(“city”,“NoCity”)==“kl”).count
很好,我得到了计数。但是当我使用.filter(u._2.get(“city”)==“kl”).count)时,我得到的计数为0。这是因为get实际上被定义为
get(key:A):Option[B]
,这意味着你得到的单子要么是某个(“值”)要么是无。这个单子永远不会直接等价于字符串。
sc.cassandraTable[(String,Map[String,String],Int)]("test","example")
 .filter( _._2.getOrElse("city","NoCity") == "kl" )
 .count