Apache spark pyspark rdd/dataframe未在cassandra中自动创建表

Apache spark pyspark rdd/dataframe未在cassandra中自动创建表,apache-spark,pyspark,cassandra,rdd,spark-cassandra-connector,Apache Spark,Pyspark,Cassandra,Rdd,Spark Cassandra Connector,检查所有源代码后,发现datastax spark cassandra连接器支持在cassandra中使用scala和java中的rdd自动创建表。对于pyspark,可以使用另一个包来完成此工作--。但即使使用此软件包,也无法自动创建表。对于dataframe,我根本找不到任何选项。我是pyspark和cassandra的新手,非常感谢您的帮助。尝试仅使用anguenot包作为依赖项。 Spark版本:2.4.7 卡桑德拉:最新docker图片 Pyspark shell >> p

检查所有源代码后,发现datastax spark cassandra连接器支持在cassandra中使用scala和java中的rdd自动创建表。对于pyspark,可以使用另一个包来完成此工作--。但即使使用此软件包,也无法自动创建表。对于dataframe,我根本找不到任何选项。我是pyspark和cassandra的新手,非常感谢您的帮助。尝试仅使用anguenot包作为依赖项。 Spark版本:2.4.7 卡桑德拉:最新docker图片

Pyspark shell >> pyspark --packages anguenot/pyspark-cassandra:2.4.0,com.datastax.spark:spark-cassandra-connector_2.11:2.5.1
>>> spark = SparkSession.builder.master('local[*]').appName('cassandra').config("spark.cassandra.connection.host", "ip").config("spark.cassandra.connection.port", "port").config("spark.cassandra.auth.username", "username").config("spark.cassandra.auth.password", "password").getOrCreate()
>>> from datetime import datetime
>>> rdd = sc.parallelize([{
...     "key": k,
...     "stamp": datetime.now(),
...     "tags": ["a", "b", "c"],
...     "options": {
...             "foo": "bar",
...             "baz": "qux",
...     }
... } for k in ["x", "y", "z"]])

>>> rdd.saveToCassandra("test", "testTable")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'RDD' object has no attribute 'saveToCassandra' 
Pyspark shell>>Pyspark--anguenot/Pyspark-cassandra包:2.4.0,com.datastax.spark:spark-cassandra-connector_2.11:2.5.1
>>>spark=SparkSession.builder.master('local[*]).appName('cassandra').config(“spark.cassandra.connection.host”,“ip”).config(“spark.cassandra.connection.port”,“port”).config(“spark.cassandra.auth.username”,“username”).config(“spark.cassandra.auth.password”,“password”).getOrCreate()
>>>从日期时间导入日期时间
>>>rdd=sc.parallelize([{
…关键:k,
…“stamp”:datetime.now(),
…“标签”:[“a”、“b”、“c”],
…“选择”:{
…“foo”:“bar”,
…“baz”:“qux”,
...     }
…}表示k在[“x”、“y”、“z”]]中
>>>rdd.saveToCassandra(“测试”、“测试表”)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
AttributeError:“RDD”对象没有属性“saveToCassandra”

在创建rdd之前,您应该导入
pyspark\u cassandra

>>> import pyspark_cassandra
>>> rdd = sc.parallelize(...)
>>> rdd.saveToCassandra("test", "testTable")

请参阅。

通常,可以从Spark Cassandra Connector for RDDs()或Dataframes()创建表,但此功能仅在Scala API中可用

自版本3.0以来,Spark Cassandra Connector(Spark 3+),因此您可以使用Spark SQL使用键空间和表(创建/更改/删除),如下所示:

spark.sql(“”)
创建表casscatalog.ksname.testTable(
键1 Int,键2 Int,键3 Int,
cc1字符串、cc2字符串、cc3字符串、值字符串)
使用卡桑德拉
分区者(键1、键2、键3)
TBLProperty(
集群_键='cc1.asc,cc2.desc,cc3.asc'
)
""")

尝试了之前忘记在此处添加的内容,这导致以下错误>java.io.IOException:找不到test.testTable或任何类似名称的键空间和表对。从这一点我知道无论如何我们不能自动创建表。我说得对吗@Aleksandr Sorokoumov不确定是否可以从RDD自动创建表。例如,Spark无法猜测哪些字段应该成为主键。这是可能的,但在Python中不行……您对Spark 2.4有严格的要求吗?或者你可以升级到Spark 3?会检查Spark3吗