DSE cassandra 和 spark 地图集合类型:如何执行获取操作
DSE cassandra and spark map collections type: how to perform get operation
例如我有以下 table 命名为 "example":
name | age | address
'abc' | 12 | {'street':'1', 'city':'kl', 'country':'malaysia'}
'cab' | 15 | {'street':'5', 'city':'jakarta', 'country':'indonesia'}
在 Spark 中我可以这样做:
scala> val test = sc.cassandraTable ("test","example")
还有这个:
scala>test.first.getString
还有这个:
scala> test.first.getMapString, 字符串
它以地图的形式给出了地址的所有字段
问题 1:但是如何使用 "get" 访问 "city" 信息?
问题2:有没有办法把整个table弄平?
问题 3:如何计算 "city" = "kl" 的行数?
谢谢
问题 3:我们如何计算 city == something 的行数
我会先回答 3,因为这可能会为您提供一种更简单的处理数据的方法。像
sc.cassandraTable[(String,Map[String,String],Int)]("test","example")
.filter( _._2.getOrElse("city","NoCity") == "kl" )
.count
首先,我在 cassandraTable
调用中使用类型参数 [(String,Map[String,String],Int)]
将行转换为元组。这使我无需任何转换即可轻松访问地图。 (顺序就是我在测试环境中制作 table 时出现的顺序,您可能需要更改顺序)
其次,我想根据 _._2
进行过滤,即传入元组的第二个元素 shorthand。 getOrElse
return 如果键存在,则为键“city”的值,否则为“NoCity”。最后的等价检查它是哪个城市。
最后,我调用count
查询城市的条目数。
1 我们如何访问地图?
所以问题 2 的答案是,一旦你有了一个地图,你就可以调用 get("key") 或 getOrElse("key") 或任何标准的 Scala 操作来从地图中获取一个值。
2 如何把整个table.
根据您所说的“扁平化”的含义,这可能有多种含义。例如,如果你想 return 整个 table 作为驱动程序的数组(不推荐,因为你的 RDD 在生产中应该非常大。)你可以调用 collect
如果您想将地图的元素展平为一个元组,您可以随时执行类似调用 toSeq
的操作,您最终会得到一个 (key,value)
元组的列表。如果我没有用“扁平化”回答您想要的内容,请随时提出另一个问题。
例如我有以下 table 命名为 "example":
name | age | address
'abc' | 12 | {'street':'1', 'city':'kl', 'country':'malaysia'}
'cab' | 15 | {'street':'5', 'city':'jakarta', 'country':'indonesia'}
在 Spark 中我可以这样做:
scala> val test = sc.cassandraTable ("test","example")
还有这个:
scala>test.first.getString
还有这个:
scala> test.first.getMapString, 字符串
它以地图的形式给出了地址的所有字段
问题 1:但是如何使用 "get" 访问 "city" 信息? 问题2:有没有办法把整个table弄平? 问题 3:如何计算 "city" = "kl" 的行数?
谢谢
问题 3:我们如何计算 city == something 的行数
我会先回答 3,因为这可能会为您提供一种更简单的处理数据的方法。像
sc.cassandraTable[(String,Map[String,String],Int)]("test","example")
.filter( _._2.getOrElse("city","NoCity") == "kl" )
.count
首先,我在 cassandraTable
调用中使用类型参数 [(String,Map[String,String],Int)]
将行转换为元组。这使我无需任何转换即可轻松访问地图。 (顺序就是我在测试环境中制作 table 时出现的顺序,您可能需要更改顺序)
其次,我想根据 _._2
进行过滤,即传入元组的第二个元素 shorthand。 getOrElse
return 如果键存在,则为键“city”的值,否则为“NoCity”。最后的等价检查它是哪个城市。
最后,我调用count
查询城市的条目数。
1 我们如何访问地图?
所以问题 2 的答案是,一旦你有了一个地图,你就可以调用 get("key") 或 getOrElse("key") 或任何标准的 Scala 操作来从地图中获取一个值。
2 如何把整个table.
根据您所说的“扁平化”的含义,这可能有多种含义。例如,如果你想 return 整个 table 作为驱动程序的数组(不推荐,因为你的 RDD 在生产中应该非常大。)你可以调用 collect
如果您想将地图的元素展平为一个元组,您可以随时执行类似调用 toSeq
的操作,您最终会得到一个 (key,value)
元组的列表。如果我没有用“扁平化”回答您想要的内容,请随时提出另一个问题。