J'obtiens cette erreur lorsque j'essaie d'exécuter ce code.
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();
}
}
Production:
Exception dans le thread "principal" Java.lang.IllegalArgumentException: Impossible d'instancier SparkSession avec le support Hive car les classes Hive sont introuvables. à org.Apache.spark.sql.SparkSession $ Builder.enableHiveSupport (SparkSession.scala: 778) à com.training.hivetest.App.main (App.Java:21)
Comment peut-il être résolu?
Ajoutez la dépendance suivante à votre projet maven.
<dependency>
<groupId>org.Apache.spark</groupId>
<artifactId>spark-Hive_2.11</artifactId>
<version>2.0.0</version>
</dependency>
J'ai examiné le code source et j'ai découvert que malgré HiveSessionState (dans spark-Hive), une autre classe HiveConf est également nécessaire pour lancer SparkSession. Et HiveConf n'est pas contenu dans le pot spark-Hive * , vous pouvez peut-être le trouver dans les pots liés à Hive et le mettre dans votre chemin de classe.
J'ai eu le même problème. Je pourrais le résoudre en ajoutant les dépendances suivantes. (J'ai résolu cette liste en faisant référence compiler la section des dépendances de la page du référentiel mvn spark-Hive_2.11 ):
<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>
où scala.binary.version = 2.11 et spark.version = 2.1.0
<properties>
<scala.binary.version>2.11</scala.binary.version>
<spark.version>2.1.0</spark.version>
</properties>
[Mise à jour de ma réponse] Cette réponse sur StackOverflow est juste - lien de réponse .
J'ai également rencontré des problèmes pour créer et exécuter Spark avec HiveSupport. Sur la base de la réponse ci-dessus, j'ai fait ce qui suit dans mon projet Spark 2.12.8).
Je peux maintenant exécuter le projet sans aucun problème.
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
)
Ma liste complète des dépendances pour Spark 2.4.1 est ici
<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>
Pour [~ # ~] sbt [~ # ~] Utilisez
// https://mvnrepository.com/artifact/org.Apache.spark/spark-Hive
libraryDependencies += "org.Apache.spark" %% "spark-Hive" % "2.1.0"
Nous avons utilisé Spark-Core-2.1.0 et Spark-SQL-2.1.0