Упаковка класса scala для блоков данных (ошибка: не найдено: значение dbutils) - PullRequest
0 голосов
/ 24 мая 2019

Попытка создать пакет с классом

package x.y.Log


import scala.collection.mutable.ListBuffer
import org.apache.spark.sql.{DataFrame}
import org.apache.spark.sql.functions.{lit, explode, collect_list, struct}
import org.apache.spark.sql.types.{StructField, StructType}
import java.util.Calendar
import java.text.SimpleDateFormat
import org.apache.spark.sql.functions._
import spark.implicits._

class Log{
...
}

Все отлично работает на том же ноутбуке, но как только я пытаюсь создать пакет, который мог бы использовать в других ноутбуках, я получаю ошибки:

<notebook>:11: error: not found: object spark
import spark.implicits._
       ^
<notebook>:21: error: not found: value dbutils
  val notebookPath = dbutils.notebook.getContext().notebookPath.get
                     ^
<notebook>:22: error: not found: value dbutils
  val userName = dbutils.notebook.getContext.tags("user")
                 ^
<notebook>:23: error: not found: value dbutils
  val userId = dbutils.notebook.getContext.tags("userId")
               ^
<notebook>:41: error: not found: value spark
    var rawMeta =  spark.read.format("json").option("multiLine", true).load("/FileStore/tables/xxx.json")
                   ^
<notebook>:42: error: value $ is not a member of StringContext
    .filter($"Name".isin(readSources))

Кто-нибудь знает, как упаковать этот класс с этими библиотеками?

1 Ответ

1 голос
/ 24 мая 2019

Предполагается, что вы используете Spark 2.x, оператор import spark.implicits._ работает только тогда, когда у вас есть объект SparkSession в области видимости. Объект Implicits определен внутри объекта SparkSession. Этот объект расширяет SQLImplicits из предыдущих версий spark Ссылка на код SparkSession на Github . Вы можете проверить ссылку для подтверждения

package x.y.Log


import scala.collection.mutable.ListBuffer
import org.apache.spark.sql.DataFrame
import org.apache.spark.sql.functions.{lit, explode, collect_list, struct}
import org.apache.spark.sql.types.{StructField, StructType}
import java.util.Calendar
import java.text.SimpleDateFormat
import org.apache.spark.sql.functions._
import org.apache.spark.sql.SparkSession

class Log{

  val spark: SparkSession = SparkSession.builder.enableHiveSupport().getOrCreate()

  import spark.implicits._

  ...[rest of the code below]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...