Spark Scala Cassandra 连接器删除所有行失败,并出现 IllegalArgumentException 要求失败异常

2024-05-20

创建表-

CREATE TABLE test.word_groups (group text, word text, count int,PRIMARY KEY (group,word));

插入数据 -

INSERT INTO test.word_groups (group , word , count ) VALUES ( 'A-group', 'raj', 0) ;
INSERT INTO test.word_groups (group , word , count ) VALUES ( 'b-group', 'jaj', 0) ;
INSERT INTO test.word_groups (group , word , count ) VALUES ( 'A-group', 'raff', 3) ;

 SELECT * FROM word_groups ;

 group   | word | count
---------+------+-------
 b-group |  jaj |     0
 A-group | raff |     3
 A-group |  raj |     0

Script -

val cassandraUrl = "org.apache.spark.sql.cassandra"
val wordGroup: Map[String, String] = Map("table" ->"word_groups", 
  "keyspace" -> "test", "cluster" -> "test-cluster")
val groupData = {spark.read.format(cassandraUrl).options(wordGroup).load()
  .where(col("group") === "b-group")}
groupData.rdd.deleteFromCassandra("sunbird_courses", "word_groups")

例外 -

java.lang.IllegalArgumentException: requirement failed: Invalid row size: 3 instead of 2.
    at scala.Predef$.require(Predef.scala:224)
    at com.datastax.spark.connector.writer.SqlRowWriter.readColumnValues(SqlRowWriter.scala:23)
    at com.datastax.spark.connector.writer.SqlRowWriter.readColumnValues(SqlRowWriter.scala:12)
    at com.datastax.spark.connector.writer.BoundStatementBuilder.bind(BoundStatementBuilder.scala:102)
    at com.datastax.spark.connector.writer.GroupingBatchBuilder.next(GroupingBatchBuilder.scala:105)
    at com.datastax.spark.connector.writer.GroupingBatchBuilder.next(GroupingBatchBuilder.scala:30)
    at scala.collection.Iterator$class.foreach(Iterator.scala:891)
    at com.datastax.spark.connector.writer.GroupingBatchBuilder.foreach(GroupingBatchBuilder.scala:30)
    at com.datastax.spark.connector.writer.TableWriter$$anonfun$writeInternal$1.apply(TableWriter.scala:229)
    at com.datastax.spark.connector.writer.TableWriter$$anonfun$writeInternal$1.apply(TableWriter.scala:198)
    at com.datastax.spark.connector.cql.CassandraConnector$$anonfun$withSessionDo$1.apply(CassandraConnector.scala:112)
    at com.datastax.spark.connector.cql.CassandraConnector$$anonfun$withSessionDo$1.apply(CassandraConnector.scala:111)
    at com.datastax.spark.connector.cql.CassandraConnector.closeResourceAfterUse(CassandraConnector.scala:129)
    at com.datastax.spark.connector.cql.CassandraConnector.withSessionDo(CassandraConnector.scala:111)
    at com.datastax.spark.connector.writer.TableWriter.writeInternal(TableWriter.scala:198)
    at com.datastax.spark.connector.writer.TableWriter.delete(TableWriter.scala:194)
    at com.datastax.spark.connector.RDDFunctions$$anonfun$deleteFromCassandra$1.apply(RDDFunctions.scala:119)
    at com.datastax.spark.connector.RDDFunctions$$anonfun$deleteFromCassandra$1.apply(RDDFunctions.scala:119)
    at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:90)
    at org.apache.spark.scheduler.Task.run(Task.scala:123)
    at org.apache.spark.executor.Executor$TaskRunner$$anonfun$10.apply(Executor.scala:408)
    at org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:1360)
    at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:414)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
21/08/11 09:01:24 WARN TaskSetManager: Lost task 0.0 in stage 11.0 (TID 2953, localhost, executor driver): java.lang.IllegalArgumentException: requirement failed: Invalid row size: 3 instead of 2.

Spark 版本 - 2.4.4 和 Spark Cassandra 连接器版本 - 2.5.0

Spark Cassandra 连接器文档链接 -https://github.com/datastax/spark-cassandra-connector/blob/master/doc/5_ saving.md#deleting-rows-and-columns https://github.com/datastax/spark-cassandra-connector/blob/master/doc/5_saving.md#deleting-rows-and-columns

我正在尝试删除这些列的所有记录,包括主键。

有什么解决方法吗?

仅供参考 - 我需要从 word_groups 表中删除组“A-group”的所有记录,包括主键/分区键


这是 2.5.x 中有趣的变化,我没有意识到 - 你现在需要有一个正确的行大小,即使keyColumns已指定,以前没有它就可以工作 - 对我来说看起来像是一个错误。

删除整行时只需保留主键 - 将删除更改为:

groupData.select("group", "word").rdd.deleteFromCassandra("test", "word_groups")

但就您而言,最好根据分区键列进行删除 - 在这种情况下,您将只有一个逻辑删除(您仍然需要仅选择必要的列):

import com.datastax.spark.connector._
{groupData.select("group").rdd
  .deleteFromCassandra("test", "word_groups", keyColumns = SomeColumns("group"))}

您甚至不需要从 Cassandra 读取输入数据 - 如果您知道分区键的值,那么您只需创建 RDD 并删除数据(类似于doc https://github.com/datastax/spark-cassandra-connector/blob/b2.5/doc/5_saving.md#example-deleting-a-range-from-a-partition):

case class Key (group:String)
{ sc.parallelize(Seq(Key("b-group")))
   .deleteFromCassandra("test", "word_groups", keyColumns = SomeColumns("group"))}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spark Scala Cassandra 连接器删除所有行失败,并出现 IllegalArgumentException 要求失败异常 的相关文章

随机推荐

  • 对客户端 JavaScript 计算器使用 eval 安全吗?

    我正在制作一个计算器 作为用户浏览器的静态 HTML 页面 该页面并非旨在将任何信息提交回服务器 除了这个计算器之外 网页上不会出现任何其他内容 在这种情况下使用 eval 安全吗 或者换句话说 在这种情况下使用 eval 是否会导致额外的
  • Qt GUI 应用程序中的控制台输出?

    我有一个在 Windows 上运行的 Qt GUI 应用程序 它允许传递命令行选项 在某些情况下我想向控制台输出一条消息 然后退出 例如 int main int argc char argv QApplication a argc arg
  • 如何从源视图 (aspx) 中的 C# 中为按钮事件添加事件处理程序

    为 HTML 源视图中的按钮创建代码隐藏 webforms 事件处理程序的最简单方法是什么 在 VB NET 中 切换到代码隐藏页面并使用顶部的对象和事件组合框来选择和创建非常容易 在 C 中 这些都缺失了 我真的不喜欢设计视图 确保 属性
  • 获取当前线程 id 和进程 id 作为整数?

    有没有办法以整数形式获取 Rust 中的当前进程 ID 和线程 ID 我得到的最接近的是 std thread current id 它返回一个不透明的ThreadId目的 当尝试访问其u64场 我得到 error E0611 field
  • SQL-Server:备份集保存现有数据库以外的数据库的备份

    我正在尝试恢复数据库的 SQL Server 备份文件 但它抛出如下错误 备份集保存除现有数据库之外的数据库的备份 我的数据库是SQL Server 2008 备份文件是2005年的 可能是什么问题 我也遇到过这个问题 解决方案 不要创建空
  • 无法解析类型为 xxx 的任何 bean;限定符:[@javax.enterprise.inject.Any()]

    我有一个 LoginProvider 接口 public interface LoginProvider boolean login String username String password 以及两种不同的实现 public clas
  • iOS UIButton 带有圆角和背景 bug

    我发现圆形 UIButton 存在一个奇怪的问题 这是我创建此按钮的代码块 let roundedButton UIButton type System roundedButton frame CGRectMake 100 100 100
  • 在 PHP 中比较两个对象的最快方法是什么?

    假设我有一个对象 在本例中为 User 对象 并且我希望能够使用单独的类来跟踪更改 用户对象不必以任何方式改变它的行为才能发生这种情况 因此 我的单独的类创建它的 干净 副本 将其存储在本地某个位置 然后可以将 User 对象与原始版本进行
  • 将 ninject 与 Ninject.Web.Api 用于 Web Api 2 一起使用在 ASP.NET MVC 5 中不起作用

    我正在开发一个 Asp NET MVC 项目 我的项目也有 web api 我正在使用 ASP NET MVC5 和 Web Api 2 以及 Visual Studio 3 我正在使用 ninject 进行依赖项注入 我知道 ninjec
  • React PropTypes 与 Flow

    PropTypes 和 Flow 涵盖相似的内容 但使用不同的方法 PropTypes 可以在运行时向您发出警告 这有助于快速找到来自服务器等的格式错误的响应 但是 Flow 似乎是未来 并且具有泛型等概念 是一个非常灵活的解决方案 Nuc
  • 在 Visual Studio Code 中调试 Go 测试

    在我的 Windows 计算机上 我安装了 Visual Studio Code 要手动运行测试 我进入控制台到项目文件夹并输入 go test main test go 它工作完美 但我遇到一种情况 我需要调试我的测试以了解发生了什么 为
  • 如何捕获一个 int

    我正在使用 IL 抛出一个 Int32 并捕获它 这只是出于好奇 我并没有试图实现任何目标 所以请不要告诉我抛出异常而不是 int method private hidebysig static void Main string args
  • div 边框上的内边距

    我想在 css 边框上添加填充 将其拉入 div 内 远离边缘 使用 css 可以吗 css3 很好 webkit 这是设计 我通过将一个 div 放在一个 div 中 然后给内部 div 一个边框来做到这一点 我想让标记尽可能精简 所以如
  • 为什么main()后面有函数定义?

    我假设最常用的系统功能之一 ls由最权威的程序员之一 Richard Stallman 编写的最著名的操作系统之一 linux 的代码可能是真正编写良好的代码的一个例子 因此 由于它是开源的 我决定看一下代码 参见例如here http m
  • Netty通道读取混乱

    我三个月前开始使用 Netty 最初 它看起来非常简单且易于使用 因为我遵循了 4 x 系列主页中给出的示例 当我更深入地探索它时 我无法理解某些事件或回调名称 例如 我无法理解以下内容之间的区别 ChannelRead ChannelHa
  • Swift 3.0 Pin 颜色注释在 MapView 中没有改变

    我有兴趣根据案例场景更改注释的图钉颜色 在一个函数中 我发送了一个数组 用于确定引脚注释的颜色 到目前为止 我已经设置了一个名为 ColorPointAnnotation 的子类 它将确定 pinColor 然后 在 switch 语句中
  • 如何在 Loopback 4 中使用有状态请求?

    在 v3 中 我们可以在底层 Express 上定义中间件 例如快速会话 https github com expressjs session 添加一个session请求对象上的属性 在 v4 中 看起来没有对应的东西 并且底层的 Expr
  • “同态映射类型”是什么意思?

    我在一些 TypeScript PR 中看到过 同态映射类型 这个术语 这是一个例子 https github com microsoft TypeScript pull 21919 https github com microsoft T
  • Apple M1 芯片上的 React Native run-android 抛出错误,“无法打开脚本的 dsl 通用类缓存”

    我正在使用 React Native 构建移动应用程序 我现在尝试在 Android 模拟器上运行我的应用程序 首先 这是继续这个问题 https stackoverflow com questions 69260732 react nat
  • Spark Scala Cassandra 连接器删除所有行失败,并出现 IllegalArgumentException 要求失败异常

    创建表 CREATE TABLE test word groups group text word text count int PRIMARY KEY group word 插入数据 INSERT INTO test word group