使用scala在spark中转换数据时,具有相同数量的参数异常的多个构造函数

时间:2016-12-08 03:28:14

标签: scala apache-spark cassandra

以下是代码

    def findUniqueGroupInMetadata(sc: SparkContext): Unit = {
    val merchantGroup = sc.cassandraTable("local_pb",     "merchant_metadata").select("group_name")

try {
  val filterByWithGroup = merchantGroup.filter {
    row =>
      row.getStringOption("group_name") match {
        case Some(s: String) if (s != null) => true
        case None => false
      }
  }.map(row => row.getStringOption("group_name").get.capitalize)


  //filterByWithGroup.take(15).foreach(data => println("merchantGroup => " + data))
  filterByWithGroup.saveToCassandra("local_pb", "merchant_group", SomeColumns("group_name"))
} catch {
  case e: Exception => println(e.printStackTrace())

}

}

例外=>

java.lang.IllegalArgumentException: Multiple constructors with the same number of parameters not allowed.
    at com.datastax.spark.connector.util.Reflect$.methodSymbol(Reflect.scala:16)
    at com.datastax.spark.connector.util.ReflectionUtil$.constructorParams(ReflectionUtil.scala:63)
    at com.datastax.spark.connector.mapper.DefaultColumnMapper.<init>(DefaultColumnMapper.scala:45)
    at com.datastax.spark.connector.mapper.LowPriorityColumnMapper$class.defaultColumnMapper(ColumnMapper.scala:47)
    at com.datastax.spark.connector.mapper.ColumnMapper$.defaultColumnMapper(ColumnMapper.scala:51)

1 个答案:

答案 0 :(得分:5)

我在查看了一些博客后找到了答案。

当我将RDD [String]转换为RDD [Tuple1 [String]]时,一切都顺利进行。所以基本上为了将数据保存到Cassandra,数据需要是RDD类型[TupleX [String]],这里x可以是1,2,3 ......或者数据可以是RDD [SomeCaseClass]