web-dev-qa-db-ja.com

HiveサポートでSparkSessionを作成する方法(「Hiveクラスが見つかりません」で失敗します)

このコードを実行しようとすると、このエラーが発生します。

import org.Apache.spark.sql.Dataset;
import org.Apache.spark.sql.Row;
import org.Apache.spark.sql.SparkSession;
public class App 
{
    public static void main(String[] args) throws Exception {
        String warehouseLocation = "file:" + System.getProperty("user.dir") + "spark-warehouse";
        SparkSession spark = SparkSession
          .builder().master("local")
          .appName("Java Spark Hive Example")
          .config("spark.sql.warehouse.dir", warehouseLocation).enableHiveSupport()
          .getOrCreate();

        String path = "/home/cloudera/Downloads/NetBeansProjects/sparksql1/src/test/Employee.json";

        spark.sql("CREATE TABLE IF NOT EXISTS src (key INT, value STRING)");
        spark.sql("LOAD DATA LOCAL INPATH '"+path+"' INTO TABLE src");



        //load from HDFS

         Dataset<Row> df = spark.read().json(path);

         df.registerTempTable("temp_table");

         spark.sql("create table TEST.employee as select * from temp_table");

         df.printSchema();
         df.show();

        }
}

出力:

スレッド "main"の例外Java.lang.IllegalArgumentException:Hiveクラスが見つからないため、HiveサポートでSparkSessionをインスタンス化できません。 org.Apache.spark.sql.SparkSession $ Builder.enableHiveSupport(SparkSession.scala:778)at com.training.hivetest.App.main(App.Java:21)

どうすれば解決できますか?

16

次の依存関係をMavenプロジェクトに追加します。

<dependency>
        <groupId>org.Apache.spark</groupId>
        <artifactId>spark-Hive_2.11</artifactId>
        <version>2.0.0</version>
</dependency>
27
abaghel

ソースコードを調べたところ、HiveSessionState(in spark-Hive)にもかかわらず、SparkSessionを開始するには別のクラスHiveConfも必要であることがわかりました。 HiveConfはspark-Hive * jarに含まれていません。Hive関連のjarで見つけることができ、クラスパスに配置できます。

3
xuchuanyin

同じ問題がありました。次の依存関係を追加することで解決できました。 (私は spark-Hive_2.11 mvnリポジトリページのコンパイル依存関係セクション )を参照してこのリストを解決しました:

 <dependency>
            <groupId>org.Apache.spark</groupId>
            <artifactId>spark-Hive_${scala.binary.version}</artifactId>
            <version>${spark.version}</version>
        </dependency>
        <dependency>
            <groupId>org.Apache.calcite</groupId>
            <artifactId>calcite-avatica</artifactId>
            <version>1.6.0</version>
        </dependency>
        <dependency>
            <groupId>org.Apache.calcite</groupId>
            <artifactId>calcite-core</artifactId>
            <version>1.12.0</version>
        </dependency>
        <dependency>
            <groupId>org.spark-project.Hive</groupId>
            <artifactId>Hive-exec</artifactId>
            <version>1.2.1.spark2</version>
        </dependency>
        <dependency>
            <groupId>org.spark-project.Hive</groupId>
            <artifactId>Hive-metastore</artifactId>
            <version>1.2.1.spark2</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>1.9.13</version>
        </dependency>

scala.binary.version = 2.11およびspark.version = 2.1.0の場合

 <properties>
      <scala.binary.version>2.11</scala.binary.version>
      <spark.version>2.1.0</spark.version>
    </properties>
2
Sruthi Poddutur

[回答の更新] StackOverflowのこの回答は正しいです- answer link

また、HiveSupportを使用してSpark=を作成および実行する問題に直面しました。上記の回答に基づいて、Spark 2.12.8プロジェクトで次のことを行いました。

  1. Build.sbtを以下のコンテンツに更新しました
  2. .idea/libraries内のファイルを手動で削除しました
  3. SBTシェルウィンドウで[Refresh all sbt projects]ボタンをクリックしました(私はintellijを使用しています)

これで、問題なくプロジェクトを実行できます。

libraryDependencies += "junit" % "junit" % "4.12" % Test
libraryDependencies ++= Seq(
  "org.Apache.spark" %% "spark-core" % "2.4.2",
  "org.Apache.spark" %% "spark-sql" % "2.4.2",
  "org.Apache.spark" %% "spark-Hive" % "2.4.2" % "provided",
  "org.scalatest" %% "scalatest" % "3.0.3" % Test
)
0
Kevin Lawrence

Spark 2.4.1の依存関係の完全なリストはこちら

  <dependency>
      <groupId>org.Apache.spark</groupId>
      <artifactId>spark-Hive_2.12</artifactId>
      <version>2.4.1</version>
  </dependency>

  <dependency>
      <groupId>org.Apache.calcite</groupId>
      <artifactId>calcite-avatica</artifactId>
      <version>1.6.0</version>
  </dependency>
  <dependency>
      <groupId>org.Apache.calcite</groupId>
      <artifactId>calcite-core</artifactId>
      <version>1.12.0</version>
  </dependency>
  <dependency>
      <groupId>org.spark-project.Hive</groupId>
      <artifactId>Hive-exec</artifactId>
      <version>1.2.1.spark2</version>
  </dependency>
  <dependency>
      <groupId>org.spark-project.Hive</groupId>
      <artifactId>Hive-metastore</artifactId>
      <version>1.2.1.spark2</version>
  </dependency>
  <dependency>
      <groupId>org.codehaus.jackson</groupId>
      <artifactId>jackson-mapper-asl</artifactId>
      <version>1.9.13</version>
  </dependency>

  <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
  <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.6.7</version>
  </dependency>

  <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
  <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.6.7.1</version>
  </dependency>


  <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->
  <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.6.7</version>
  </dependency>

  <!-- https://mvnrepository.com/artifact/org.codehaus.janino/janino -->
  <dependency>
      <groupId>org.codehaus.janino</groupId>
      <artifactId>janino</artifactId>
      <version>3.0.9</version>
  </dependency>

  <!-- https://mvnrepository.com/artifact/org.codehaus.janino/commons-compiler -->
  <dependency>
      <groupId>org.codehaus.janino</groupId>
      <artifactId>commons-compiler</artifactId>
      <version>3.0.9</version>
  </dependency>
0
Harry Nguyen

For[〜#〜] sbt [〜#〜]使用
// https://mvnrepository.com/artifact/org.Apache.spark/spark-Hive

libraryDependencies += "org.Apache.spark" %% "spark-Hive" % "2.1.0"


Spark-Core-2.1.0およびSpark-SQL-2.1.0を使用しました

0
Sachin Patil