Как использовать Delta Lake в обычном проекте Scala в IDE - PullRequest
0 голосов
/ 11 июля 2020

Я добавил дельта-зависимости в свой build.sbt

libraryDependencies ++= Seq(
  "org.apache.spark" %% "spark-core" % sparkVersion,
  "org.apache.spark" %% "spark-sql" % sparkVersion,
  "org.apache.spark" %% "spark-hive" % sparkVersion,
  // logging
  "org.apache.logging.log4j" % "log4j-api" % "2.4.1",
  "org.apache.logging.log4j" % "log4j-core" % "2.4.1",
  // postgres for DB connectivity
  "org.postgresql" % "postgresql" % postgresVersion,
  "io.delta" %% "delta-core" % "0.7.0"

Однако я не могу понять, какую конфигурацию должен содержать сеанс Spark. Приведенный ниже код не работает.

val spark = SparkSession.builder()
    .appName("Spark SQL Practice")
    .config("spark.master", "local")
    .config("spark.network.timeout"  , "10000000s")//to avoid Heartbeat exception
    .config("spark.sql.extensions", "io.delta.sql.DeltaSparkSessionExtension")
    .config("spark.sql.catalog.spark_catalog", "org.apache.spark.sql.delta.catalog.DeltaCatalog")
    .getOrCreate()

Исключение -

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/sql/catalyst/plans/logical/MergeIntoTable

Ответы [ 3 ]

2 голосов
/ 11 июля 2020

Вот пример проекта , который вам поможет.

Файл build.sbt должен включать следующие зависимости:

libraryDependencies += "org.apache.spark" %% "spark-sql" % "3.0.0" % "provided"
libraryDependencies += "io.delta" %% "delta-core" % "0.7.0" % "provided"

Я думаю, вам нужно с использованием Spark 3 для Delta Lake 0.7.0 .

Вам не нужны какие-либо специальные параметры конфигурации SparkSession, примерно так:

lazy val spark: SparkSession = {
  SparkSession
    .builder()
    .master("local")
    .appName("spark session")
    .config("spark.databricks.delta.retentionDurationCheck.enabled", "false")
    .getOrCreate()
}

Вот сообщение в блоге , которое поможет вам начать работу с Delta Lake.

1 голос
/ 11 июля 2020

Это вызвано тем, что существует файл класса, от которого зависит ваш код, и он присутствует во время компиляции, но не найден во время выполнения. Ищите различия в пути к классам времени сборки и времени выполнения.

Более подробно c для вашего сценария:

If you get  java.lang.NoClassDefFoundError on
org/apache/spark/sql/catalyst/plans/logical/MergeIntoTable exception 
in this case JAR version does not have MergeIntoTable.scala file. 
The solution was to add the apache spark latest version, which comes with the
org/apache/spark/sql/catalyst/plans/logical/MergeIntoTable.scala file . 

Дополнительная информация в обновлении и выпуске Spark 3.xx - https://github.com/apache/spark/pull/26167.

0 голосов
/ 11 июля 2020

Необходимо обновить Apache Spark. Функция MergeIntoTable была представлена ​​в версии v3.0.0. Ссылка на источники: AstBuilder. scala, Analyzer. scala, Github Pull Request , Примечания к выпуску (Посмотрите в Feature Раздел "Улучшения").

...