3

Я пытаюсь объединить multitple столбцы после поворота в Scala Спарк 2.0.1:Выберите столбец по имени с несколькими агрегатных колоннами после поворота с искрой Scala

scala> val df = List((1, 2, 3, None), (1, 3, 4, Some(1))).toDF("a", "b", "c", "d") 
df: org.apache.spark.sql.DataFrame = [a: int, b: int ... 2 more fields] 

scala> df.show 
+---+---+---+----+ 
| a| b| c| d| 
+---+---+---+----+ 
| 1| 2| 3|null| 
| 1| 3| 4| 1| 
+---+---+---+----+ 

scala> val pivoted = df.groupBy("a").pivot("b").agg(max("c"), max("d")) 
pivoted: org.apache.spark.sql.DataFrame = [a: int, 2_max(`c`): int ... 3 more fields] 

scala> pivoted.show 
+---+----------+----------+----------+----------+ 
| a|2_max(`c`)|2_max(`d`)|3_max(`c`)|3_max(`d`)| 
+---+----------+----------+----------+----------+ 
| 1|   3|  null|   4|   1| 
+---+----------+----------+----------+----------+ 

Я не могу выбрать или переименовать эти столбцы так далеко:

scala> pivoted.select("3_max(`d`)") 
org.apache.spark.sql.AnalysisException: syntax error in attribute name: 3_max(`d`); 

scala> pivoted.select("`3_max(`d`)`") 
org.apache.spark.sql.AnalysisException: syntax error in attribute name: `3_max(`d`)`; 

scala> pivoted.select("`3_max(d)`") 
org.apache.spark.sql.AnalysisException: cannot resolve '`3_max(d)`' given input columns: [2_max(`c`), 3_max(`d`), a, 2_max(`d`), 3_max(`c`)]; 

Должен быть простой трюк здесь, любые идеи? Благодарю.

ответ

0

Кажется, что ошибка, обратные клещи вызвали проблему. Одним из способов исправить здесь было бы удалить обратно клещей из имен столбцов:

val pivotedNewName = pivoted.columns.foldLeft(pivoted)((df, col) => 
          df.withColumnRenamed(col, col.replace("`", ""))) 

Теперь вы можете выбрать по именам столбцов в обычном режиме:

pivotedNewName.select("2_max(c)").show 
+--------+ 
|2_max(c)| 
+--------+ 
|  3| 
+--------+ 
+0

Это связано с https: //issues.apache. орг/JIRA/просмотр/SPARK-18502 – user1933178

 Смежные вопросы

  • Нет связанных вопросов^_^