Spark Full Rdd joinWithCassandraTable java.lang.IllegalArgumentException:要求失败:无效的行大小:而不是

问题描述

  • 我目前正在尝试将spark数据框加入到cassandra表中。
  • 很遗憾,我们无法立即升级到新的Datastax连接器2.5.0并使用直接联接
  • 所以我正在尝试使用现有的 joinWithCassandraTable

这是我的示例代码

# Cassandra Table Definition 

custId: text PRIMARY KEY
custName: text
custAddress: text

val testDF = Seq(("event-01","cust-01"),("event-02","cust-02")).toDF(("eventId","custId"))

val resultRdd = testDF
    .rdd
    .leftJoinWithCassandraTable(
      keyspaceName = "my_key_space",tableName = "cust_table",selectedColumns = AllColumns,joinColumns = SomeColumns("custId")
    )
    .map { case (sparkRow,cassandraRow) =>
      val resultStruct = cassandraRow
        .map(r => Row.fromSeq(r.columnValues))
        .orNull
      Row.fromSeq(sparkRow.toSeq :+ resultStruct)
    }
  • 这将引发 java.lang.IllegalArgumentException:要求失败:无效的行大小:2而不是1
  • 如果我将testDF限制为仅包含 custId 列,则可以正常工作。
  • 我在某个地方犯错了吗?如何在Full Rdd上执行联接,而不是仅通过键列进行投影

解决方法

您需要在leftJoinWithCassandraTable之后使用.on(SomeColumns("custId")) ...

我有the blog post on the efficient join with Cadsandra,它也描述了RDD API ...

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...