1

Spark-2.0では、Sparkセッションを作成する最適な方法は何ですか? Spark-2.0とCassandraの両方でAPIが再加工されたため、本質的にSqlContext(およびCassandraSqlContext)も非推奨になっています。そこでSQLを実行するには、私はCassandraセッション(com.datastax.driver.core.Session) and use execute(" ")を作成します。または、SparkSession (org.apache.spark.sql.SparkSession) and execute sql(String sqlText)メソッドを作成する必要があります。CassandraのSpark2セッション、SQLクエリ

いずれかのSQLの制限事項はわかりません - 誰かが説明できるかどうか。

また、SparkSessionを作成する必要がある場合はどうすればいいですか?適切な例は見つかりませんでした。 APIがリワークされると、古い例は機能しません。 私はこのコードのサンプルでDataFramesを実行していましたが、ここではどのSQLコンテキストが使用されているのかわかりません(正しいアプローチは進んでいます) (何らかの理由で非難されたAPIはコンパイルされていないため、Eclipse設定を確認する必要があります)

ありがとう

答えて

5

Cassandra DBの作成/削除キースペースとテーブルにはCassandraセッションが必要です。 Sparkアプリケーションでは、Cassandra Sessionを作成するためにSparkConfをCassandraConnectorに渡す必要があります。 Spark 2.0では以下のようにすることができます。あなたがデータフレームを既存しているなら、あなたにもDataFrameFunctions.createCassandraTable(Df)を使用してカサンドラにテーブルを作成することができます

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)"); 

。 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()メソッドを使用することができます。

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

ありがとうございました。これはまさに私が探していたものです。 SparkやCassandraを使用してクエリを実行する際には、SQLの制限事項には何の制限もありませんか?キースペース/テーブルを作成することを理解するには、cassandraを使用する必要があります。 –

+0

また、SparkSession.sql() - Cassandraテーブルに対してではなく、一時テーブルに対してのみクエリを実行できますか。 Sparkの文書にはそのことは記載されていません。 "SQL構文解析に使用される方言は、 'spark.sql.dialect'を使用して構成できます。SQLContextの場合、利用できる唯一の方言は" SQL "です。このSQL構文は、Spark SQLが提供する単純なSQLパーサを使用します。HiveContext 、デフォルトは "hiveql"ですが、 "sql"も利用できます。HiveQLパーサーははるかに完全であるため、ほとんどのユースケースでお勧めします。 –

+0

SparkSession.sqlは一時テーブルに限定されません。 Spark JDBCを使用して、異なるデータベースに接続することができます。 SparkCassandraConnectorを使用すると、Cassandra DBを使用するのがはるかに簡単です。 – abaghel

関連する問題