我有一个包含很多列的表,例如test\u event,还有一个表test在同一个keyspace中,它包含我必须从test\u event中删除的行的id。
我试过从Cassandra删除,但是没有用,因为spark看不到sparkcontext。我发现了一些使用delete-from的解决方案,但它是用scala编写的。
经过大约一百次的尝试,我终于弄糊涂了,请求你的帮助。有人能和我一步一步地做吗?
我有一个包含很多列的表,例如test\u event,还有一个表test在同一个keyspace中,它包含我必须从test\u event中删除的行的id。
我试过从Cassandra删除,但是没有用,因为spark看不到sparkcontext。我发现了一些使用delete-from的解决方案,但它是用scala编写的。
经过大约一百次的尝试,我终于弄糊涂了,请求你的帮助。有人能和我一步一步地做吗?
2条答案
按热度按时间lmvvr0a81#
看看这个代码:
请注意,一次删除一行并不是spark的最佳实践,但上面的代码只是一个示例,可以帮助您了解实现。
xmjla07d2#
spark cassandra连接器(scc)本身只为python提供Dataframeapi。但是有一个pyspark cassandra包在scc之上提供rddapi,所以可以按如下方式执行删除。
从pyspark shell开始(我尝试过spark 2.4.3):
和内部从一个表中读取数据,并执行删除操作。您需要有源数据才能有与主键对应的列。它可以是完全主键,部分主键,或者只有分区键-根据它的不同,cassandra将使用相应的tombstone类型(row/range/partition tombstone)。
在我的示例中,表的主键由一列组成-这就是为什么我在数组中只指定了一个元素: