gpt4 book ai didi

java - Cassandra 的 Spark2 session ,sql 查询

转载 作者:行者123 更新时间:2023-12-05 08:56:24 26 4
gpt4 key购买 nike

在 Spark-2.0 中,创建 Spark session 的最佳方式是什么。因为在 Spark-2.0 和 Cassandra 中,API 已经过重新设计,基本上弃用了 SqlContext(以及 CassandraSqlContext)。因此,为了执行 SQL,我创建了一个 Cassandra Session (com.datastax.driver.core.Session) 并使用了 execute( "")。或者我必须创建一个 SparkSession (org.apache.spark.sql.SparkSession) 并执行 sql(String sqlText) 方法。

我不知道两者的 SQL 限制 - 谁能解释一下。

此外,如果我必须创建 SparkSession - 我该怎么做 - 找不到任何合适的示例。随着 API 的重新设计,旧示例不再适用。我正在浏览这段代码示例- DataFrames - 不清楚这里使用的是什么 sql 上下文(这是前进的正确方法。)(出于某种原因,已弃用的 API 甚至无法编译 - 需要检查我的 eclipse 设置)

谢谢

最佳答案

您需要 Cassandra Session 来从 Cassandra DB 创建/删除键空间和表。在 Spark 应用程序中,为了创建 Cassandra Session,您需要将 SparkConf 传递给 CassandraConnector。在 Spark 2.0 中,您可以像下面那样进行操作。

 SparkSession spark = SparkSession
.builder()
.appName("SparkCassandraApp")
.config("spark.cassandra.connection.host", "localhost")
.config("spark.cassandra.connection.port", "9042")
.master("local[2]")
.getOrCreate();

CassandraConnector connector = CassandraConnector.apply(spark.sparkContext().conf());
Session session = connector.openSession();
session.execute("CREATE TABLE mykeyspace.mytable(id UUID PRIMARY KEY, username TEXT, email TEXT)");

如果您有现有的 Dataframe,那么您也可以使用 DataFrameFunctions.createCassandraTable(Df) 在 Cassandra 中创建表。查看 api 详细信息 here .

您可以使用 spark-cassandra-connector 提供的 api 从 Cassandra DB 读取数据,如下所示。

Dataset<Row> dataset = spark.read().format("org.apache.spark.sql.cassandra")
.options(new HashMap<String, String>() {
{
put("keyspace", "mykeyspace");
put("table", "mytable");
}
}).load();

dataset.show();

您可以使用 SparkSession.sql() 方法对在由 spark cassandra 连接器返回的 Dataframe 上创建的临时表运行查询,如下所示。

dataset.createOrReplaceTempView("usertable");
Dataset<Row> dataset1 = spark.sql("select * from usertable where username = 'Mat'");
dataset1.show();

关于java - Cassandra 的 Spark2 session ,sql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41023957/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com