Шифровать столбец CSV через UDF, Spark - Scala - PullRequest
3 голосов
/ 10 апреля 2020

Я пытаюсь зашифровать столбец в моем CSV файле. Я пытаюсь сделать это с помощью UDF. Но я получаю ошибку компиляции. Вот мой код:

import org.apache.spark.sql.functions.{col, udf}

val upperUDF1 = udf { str: String => Encryptor.aes(str) }

val rawDF = spark
      .read
      .format("csv")
      .option("header", "true")
      .load(inputPath)

rawDF.withColumn("id", upperUDF1("id")).show() //Compilation error.

Я получаю ошибку компиляции в последней строке, я использую неправильный синтаксис. Заранее спасибо. Error

Ответы [ 2 ]

3 голосов
/ 10 апреля 2020

Вы должны отправить Column, а не String, вы можете ссылаться на столбец с помощью различных синтаксисов:

$"<columnName>" 
col("<columnName>")

Поэтому вы должны попробовать это:

rawDF.withColumn("id", upperUDF1($"id")).show()

или это:

rawDF.withColumn("id", upperUDF1(col("id"))).show()

Лично мне больше всего нравится синтаксис доллара, мне он кажется более элегантным

1 голос
/ 10 апреля 2020

В дополнение к ответу SCouto, вы также можете зарегистрировать свой udf как функцию Spark SQL с помощью

spark.udf.register("upperUDF2", upperUDF1)

Ваше последующее выражение выбора может выглядеть следующим образом

rawDF.selectExpr("id", "upperUDF2(id)").show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...