как выполнить много выражений в selectExpr - PullRequest
0 голосов
/ 30 апреля 2020

можно применить много выражений в одном и том же selectExpr, например, если у меня есть этот DF:

+---+
|  i|
+---+
| 10|
| 15|
| 11|
| 56|
+---+

, как умножить на 2 и переименовать столбец следующим образом:

df.selectExpr("i*2 as multiplication")

Ответы [ 2 ]

2 голосов
/ 30 апреля 2020

def selectExpr(exprs: String*): org.apache.spark.sql.DataFrame

Если у вас много выражений, вам нужно передать их через запятую. Пожалуйста, проверьте код ниже.

scala> val df = (1 to 10).toDF("id")
df: org.apache.spark.sql.DataFrame = [id: int]

scala> df.selectExpr("id*2 as twotimes", "id * 3 as threetimes").show
+--------+----------+
|twotimes|threetimes|
+--------+----------+
|       2|         3|
|       4|         6|
|       6|         9|
|       8|        12|
|      10|        15|
|      12|        18|
|      14|        21|
|      16|        24|
|      18|        27|
|      20|        30|
+--------+----------+

0 голосов
/ 30 апреля 2020

Да, вы можете передать несколько выражений внутри df.selectExpr. https://spark.apache.org/docs/2.2.0/api/scala/index.html#org. apache .spark. sql. Dataset@selectExpr (exprs: String *): org. apache .spark. sql .DataFrame

scala> case class Person(name: String, lanme: String)
scala> val personDS = Seq(Person("Max", 1), Person("Adam", 2), Person("Muller", 3)).toDS()
scala > personDs.show(false)
+------+---+
|name  |age|
+------+---+
|Max   |1  |
|Adam  |2  |
|Muller|3  |
+------+---+
scala> personDS.selectExpr("age*2 as multiple","name").show(false)
+--------+------+
|multiple|name  |
+--------+------+
|2       |Max   |
|4       |Adam  |
|6       |Muller|
+--------+------+

Или вы также можете использовать withColumn для достижения тех же результатов

scala> personDS.withColumn("multiple",$"age"*2).select($"multiple",$"name").show(false)
+--------+------+
|multiple|name  |
+--------+------+
|2       |Max   |
|4       |Adam  |
|6       |Muller|
+--------+------+
...