我对Spark和Scala很陌生,我正在使用spark-shell通过datastax开源连接器访问Cassandra。
使用此命令:
sc.cassandraTable("keyspace","table")
.select("gender","name")
.mapValues(v => v.get())
.lookup("Male")
并收到此错误:
error: value mapValues is not a member of com.datastax.spark.connector.rdd.CassandraTableScanRDD[com.datastax.spark.connector.CassandraRow]
我不知道这种转变是否仅适用于datastax企业;我无法找到有关此的更多信息。
更多详情:
- Java 1.8.0_151
- 火花 2.2.1
- 斯卡拉 2.11
- 卡桑德拉 3.11.1
好的。我已经用这种方式解决了,使用问题中的注释:
sc.cassandraTable[(String,String)]("keyspace","table")
.where("gender = 'Male'")
.select("gender","name")
.map{case (k,v) => (v,1)}
.reduceByKey{case (v,count) => count + count}
.collect.foreach(println)
该解决方案的关键是 Spark 中 Cassandra Row 和 Scala 类型之间的类型转换cassandraTable[(String,String)]
。
谢谢。