Dictionary DSE cassandra和spark地图集合类型:如何执行get操作
例如,我有一个名为“example”的下表: 在Spark中,我可以这样做: scala>val test=sc.cassandraTable(“测试”、“示例”) 这是: scala>test.first.getString 这是: scala>test.first.getMapString,字符串 它以地图的形式给出了地址的所有字段 问题1:但我如何使用“获取”来访问“城市”信息? 问题2:有没有办法让整个桌子都坐满? 问题3:如何计算“city”=“kl”的行数 谢谢问题3:我们如何计算city==某物的行数 我将首先回答3,因为这可能为您提供处理数据的更简单方法。差不多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
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