【问题标题】:How to write file to cassandra from spark如何从spark将文件写入cassandra
【发布时间】:2018-08-15 13:03:10
【问题描述】:

我是 spark 和 Cassandra 的新手。我使用此代码,但它给了我错误。

val dfprev = df.select(col = "se","hu")
val a = dfprev.select("se")
val b = dfprev.select("hu")
val collection = sc.parallelize(Seq(a,b))
collection.saveToCassandra("keyspace", "table", SomeColumns("se","hu"))

当我在savetocassandra 上输入此代码时,它给了我错误,错误是:

java.lang.IllegalArgumentException:不允许具有相同数量参数的多个构造函数。 在 com.datastax.spark.connector.util.Reflect$.methodSymbol(Reflect.scala:16) 在 com.datastax.spark.connector.util.ReflectionUtil$.constructorParams(ReflectionUtil.scala:63) 在 com.datastax.spark.connector.mapper.DefaultColumnMapper.(DefaultColumnMapper.scala:45) 在 com.datastax.spark.connector.mapper.LowPriorityColumnMapper$class.defaultColumnMapper(ColumnMapper.scala:51) 在 om.datastax.spark.connector.mapper.ColumnMapper$.defaultColumnMapper(ColumnMapper.scala:55)

【问题讨论】:

    标签: scala hadoop apache-spark cassandra apache-spark-sql


    【解决方案1】:
    val dfprev = df.select("se","hu")
    dfprev.write.format("org.apache.spark.sql.cassandra")
    .options(Map("keyspace"->"YOUR_KEYSPACE_NAME","table"->"YOUR_TABLE_NAME"))
    .mode(SaveMode.Append)
    .save()
    

    变量ab 是数据帧类型。 sc.parallelize 从元素集合创建 RDD,它不接受数据帧作为输入。

    注意:sparkconf中设置spark.cassandra.connection.host AND spark.cassandra.auth.username & spark.cassandra.auth.password(如果启用了身份验证)

    【讨论】:

    • 有不同的 saveMode 可用,如 Overwrite、Append、ErrorIfExists.. 等...查看您的用例并使用适当的... cassandra append 将向表中添加新记录并更新现有记录...如果您不使用 saveMode 并且如果表中存在具有相同主键的记录,则作业将失败
    猜你喜欢
    • 2019-10-15
    • 2019-11-12
    • 1970-01-01
    • 2021-06-08
    • 2019-06-14
    • 2017-03-04
    • 2016-05-14
    • 1970-01-01
    • 2017-08-22
    相关资源
    最近更新 更多