【问题标题】:Create Cassandra Table from pyspark DataFrame从 pyspark DataFrame 创建 Cassandra 表
【发布时间】:2018-07-01 23:05:54
【问题描述】:

我将 Apache Spark 2.2.1 与 Cassandra 3.11 和来自 python/pyspark 的 Datastax spark-cassandra-connector 一起使用。

我想从数据集结构创建 Cassandra 表。所以,我在 Java 的 DataSetFunction 包中找到了一个函数createCassandraTable,但是我找不到与 pyspark 包的对应关系。 This 是 Java 中的类似问题。

我正在尝试这样的事情:

dataset.createCassandraTable('examples', 'table_example', partitionKeyColumns = ['id'])

createCassandraTable 不是数据集/数据框的方法。

我知道我可以在 spark 中使用原始 CQL 创建表,但是我想以动态和编程方式这样做。虽然,它是另一种选择,可能是 spark 和 cassandra 类型之间的映射。

这里有什么经验或新想法吗? Spark SQL 替代方案?

【问题讨论】:

    标签: apache-spark cassandra pyspark cassandra-3.0 spark-cassandra-connector


    【解决方案1】:
    我也面临同样的问题。

    但我认为有一种方法是可能的。即使用一些驱动程序让我们说cassandra-driver 用于python。

    我们可以使用可用的方法从数据框中收集所需的列字段,并且可以在运行时以编程方式创建表。

    之后,我们可以使用以下代码存储数据,

    df.write.format("org.apache.spark.sql.cassandra").mode('append').options(table=".options(table="kv", keyspace="test")kv", keyspace="test").save()
    

    【讨论】:

    • 我建议改写为更自信但不那么大胆。 IE。放松“可能”和其他一切的大胆属性。更多细节可能也会有所帮助。
    【解决方案2】:

    通过使用 org.apache.spark.sql.cassandra 源并为 keyspace 指定关键字参数,可以将 DataFrame 保存到现有 Cassandra 表中em>表格和保存模式(追加、覆盖、错误或忽略等)

    作为 Pyspark DataFrame 保存到 Cassandra 表的示例

    df.write\
    .format("org.apache.spark.sql.cassandra")\
    .mode('append')\
    .options(table="kv", keyspace="test")\
    .save()
    

    选项和参数与 Scala Data Frames Api 相同。

    您可以在此link 中找到更多详细信息。

    希望,这会有所帮助。

    【讨论】:

    • 保存数据不是问题。我想以编程方式创建表。可以保存 DataFrame 内容,而不是用于创建与 DataFrame 模式结构相似的表。我认为 createCassandraTable 方法适用于 Scala 或 Java
    【解决方案3】:

    这个呢?我知道这与您正在寻找的不同,但它可能会有所帮助。

    from cassandra.cluster import Cluster
    cluster = Cluster(['192.168.1.1', '192.168.1.2'])
    session.setKeyspace('myKeyspace')
    session = cluster.connect()
    session.execute("CREATE TABLE users (id int PRIMARY KEY, location address)")
    ...
    cluster.shutdown()
    

    您甚至可以创建 KEYSPACE、设置因子复制等等... 请参阅此处的文档:https://datastax.github.io/python-driver/api/cassandra/cluster.html

    【讨论】:

    • 他要求的功能与 Scala 的版本相当,当 Spark 连接器推断所有类型、定义表结构等时。他知道原始 CQL 方式...
    • 确实如此。但无论如何,有人可能会觉得它很有帮助。我发布了它,因为在 pyspark 中没有其他方法,或者是吗?
    • 不,据我所知...作者也知道可以使用原始 CQL - 他提出问题的动机是表结构应该以某种方式根据数据中的类型自动构建框架
    • 也许有一天会有其他方法,怎么做。在那之前我们必须使用 Scala 或 Java,哈哈(实际上我们之前因为 pyspark 的限制而不得不在其他项目中使用 Javaspark :))
    猜你喜欢
    • 2021-06-01
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-15
    • 1970-01-01
    相关资源
    最近更新 更多