Как сделать ссылку / выбрать столбец в текущем фрейме данных - PullRequest
0 голосов
/ 03 марта 2020

Я пытаюсь ссылаться на столбец в dataFrame по его имени. В оболочке spark я мог бы использовать $ , что неизвестно при компиляции кода.
Вот пример:

val df:DataFrame= Seq(
   ("Alex", "04/01/1992"),
   ("Sarah","01/01/2000"),
   ("David","01/01/2005")
  ).toDf("name","Birthdate").to_date($"Birthday")

в этом примере я создаю dataFrame и пытаюсь преобразовать тип дня рождения из строки в дату, однако при кодировании $ не принимается, поэтому мне нужно создать промежуточное значение:

    val df1:DataFrame= Seq(
           ("Alex", "04/01/1992"),
           ("Sarah","01/01/2000"),
           ("David","01/01/2005")
          ).toDf("name","Birthdate")
   val df2= df1.to_date($"Birthday")

Есть ли способ получить промежуточную переменную?
что эквивалентно $ in scala code

Ответы [ 2 ]

1 голос
/ 03 марта 2020

Мы можем получить доступ к столбцам, используя col("<col_name>") (or) '<col_name> (or) $"<col_name>" (or) col_name в scala.

Example:

val df:DataFrame= Seq(("Alex", "04/01/1992"),("Sarah","01/01/2000"),("David","01/01/2005")).toDF("name","Birthdate")

//using withColumn supports col("<col_name>") (or) '<col_name> (or) $"<col_name>"
df.withColumn("Birthdate",to_date(col("Birthdate"),"dd/MM/yyyy")).show()
df.withColumn("Birthdate",to_date('Birthdate,"dd/MM/yyyy")).show()
df.withColumn("Birthdate",to_date($"Birthdate","dd/MM/yyyy")).show()

//using .select supports col("<col_name>") (or) '<col_name> (or) $"<col_name>"
df.select(to_date('Birthdate,"dd/MM/yyyy")).show()
df.select(to_date($"Birthdate","dd/MM/yyyy")).show()
df.select(to_date(col("Birthdate"),"dd/MM/yyyy")).show()

//using .select(expr) and .selectExpr supports <col_name>
df.select(expr("to_date(Birthdate,'dd/MM/yyyy')Birthdate")).show()
df.selectExpr("to_date(Birthdate,'dd/MM/yyyy')Birthdate").show()
1 голос
/ 03 марта 2020

Вы можете использовать col и withColumn:

%scala
import org.apache.spark.sql.functions.{col,to_date}

val df= Seq(
   ("Alex", "04/01/1992"),
   ("Sarah","01/01/2000"),
   ("David","01/01/2005")
  ).toDF("name","Birthdate").withColumn("Birthdate", to_date(col("Birthdate"),"dd/MM/yyyy")).show()

+-----+----------+
| name| Birthdate|
+-----+----------+
| Alex|1992-01-04|
|Sarah|2000-01-01|
|David|2005-01-01|
+-----+----------+
...