Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 使用pyspark或cql查询从cassandra表中删除行_Apache Spark_Pyspark_Cassandra_Spark Cassandra Connector - Fatal编程技术网

Apache spark 使用pyspark或cql查询从cassandra表中删除行

Apache spark 使用pyspark或cql查询从cassandra表中删除行,apache-spark,pyspark,cassandra,spark-cassandra-connector,Apache Spark,Pyspark,Cassandra,Spark Cassandra Connector,我有一个包含很多列的表,用于ex.test_事件,我还有另一个表test,它位于同一个键空间中,包含我必须从test_事件中删除的行的id 我尝试从Cassandra删除,但它不起作用,因为spark看不到SparkContext。 我发现有些解决方案使用DELETE,但它是用scala编写的 经过大约一百次的尝试,我终于弄糊涂了,请求你的帮助。有人能一步一步地和我一起做吗?看看这个代码: from pyspark.sql import SQLContext def main_function

我有一个包含很多列的表,用于ex.test_事件,我还有另一个表test,它位于同一个键空间中,包含我必须从test_事件中删除的行的id

我尝试从Cassandra删除,但它不起作用,因为spark看不到SparkContext。 我发现有些解决方案使用DELETE,但它是用scala编写的


经过大约一百次的尝试,我终于弄糊涂了,请求你的帮助。有人能一步一步地和我一起做吗?

看看这个代码:

from pyspark.sql import SQLContext

def main_function():

  sql = SQLContext(sc)
  tests = sql.read.format("org.apache.spark.sql.cassandra").\
               load(keyspace="your keyspace", table="test").where(...)
  for test in tests:
    delete_sql = "delete from test_event where id = " + test.select('id')
    sql.execute(delete_sql)

请注意,一次删除一行并不是spark的最佳实践,但上面的代码只是一个示例,可以帮助您了解实现。

spark Cassandra Connector(SCC)本身仅为Python提供数据帧API。但有一个在SCC之上提供RDDAPI的应用程序,所以可以按如下方式执行删除

开始pyspark shell时使用(我已尝试使用Spark 2.4.3):

和内部从一个表中读取数据,并执行删除操作。您需要有源数据才能有与主键对应的列。它可以是完全主键、部分主键,也可以是唯一的分区键——根据具体情况,Cassandra将使用相应的墓碑类型(行/范围/分区墓碑)

在我的示例中,表的主键由一列组成-这就是为什么我在数组中只指定了一个元素:

rdd=sc.cassandraTable(“测试”、“m1”)
rdd.deleteFromCassandra(“test”,“m1”,keyColumns=[“id”]))

你能展示一下代码吗?deleteFromCassandra很有效,也许你遗漏了一些imports@AlexOtttest.deleteFromCassandra(keyspace,test_event)您需要指定keyColumns参数用id显示表的结构,我昨天错过了主表的主键,它是pyspark的-请看答案…'TypeError:'Column'对象不可调用'。我应该把它重写为UDF吗?我创建了一个带参数“id”的函数,现在我不知道如何应用它。我的意思是用id遍历测试表。检查数据帧的名称,“id”列可能不存在。如果您想逐个id删除id,那么是的,您将需要迭代。请记住,这不是spark的好做法,建议您过滤并删除所有匹配的内容。例如,对于Cassandra,可以通过分区键删除。
bin/pyspark --conf spark.cassandra.connection.host=IPs\
    --packages anguenot:pyspark-cassandra:2.4.0