このコードを実行しようとすると、このエラーが発生します。
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)
どうすれば解決できますか?
次の依存関係をMavenプロジェクトに追加します。
<dependency>
<groupId>org.Apache.spark</groupId>
<artifactId>spark-Hive_2.11</artifactId>
<version>2.0.0</version>
</dependency>
ソースコードを調べたところ、HiveSessionState(in spark-Hive)にもかかわらず、SparkSessionを開始するには別のクラスHiveConfも必要であることがわかりました。 HiveConfはspark-Hive * jarに含まれていません。Hive関連のjarで見つけることができ、クラスパスに配置できます。
同じ問題がありました。次の依存関係を追加することで解決できました。 (私は 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>
[回答の更新] StackOverflowのこの回答は正しいです- answer link 。
また、HiveSupportを使用してSpark=を作成および実行する問題に直面しました。上記の回答に基づいて、Spark 2.12.8プロジェクトで次のことを行いました。
これで、問題なくプロジェクトを実行できます。
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
)
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>
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を使用しました