спарк-чтение не работает внутри функции Scala UDF - PullRequest
1 голос
/ 14 апреля 2019

Я пытаюсь использовать spark.read, чтобы получить количество файлов в моем UDF, но когда я выполняю программу, в этот момент программа зависает.

Я вызываю UDF в столбце dataframe.udf должен прочитать файл и вернуть счетчик.Но это не работает.Я передаю значение переменной в функцию UDF.когда я удаляю код spark.read и просто возвращаю число, оно работает.но spark.read не работает через UDF

def prepareRowCountfromParquet(jobmaster_pa: String)(implicit spark: SparkSession): Int = {
      print("The variable value is " + jobmaster_pa)
      print("the count is " + spark.read.format("csv").option("header", "true").load(jobmaster_pa).count().toInt)
      spark.read.format("csv").option("header", "true").load(jobmaster_pa).count().toInt
    }
val SRCROWCNT = udf(prepareRowCountfromParquet _)

  df
  .withColumn("SRC_COUNT", SRCROWCNT(lit(keyPrefix))) 

Столбец SRC_COUNT должен получить строки файла

1 Ответ

2 голосов
/ 14 апреля 2019

UDF не могут использовать контекст искры, так как он существует только в драйвере и не сериализуем.

Вообще говоря, вам нужно прочитать все csvs, рассчитать количество с помощью groupBy, а затем вы можете выполнить левое соединение с df

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...