Отключение кадра данных в Spark и scala - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть такой фрейм данных:

+----------+-----+------+------+-----+---+
|   product|china|france|german|india|usa|
+----------+-----+------+------+-----+---+
|     beans|  496|   200|   210|  234|119|
|    banana| null|   345|   234|  123|122|
|starwberry|  340|   430|   246|  111|321|
|     mango| null|   345|   456|  110|223|
|     chiku|  765|   455|   666|  122|222|
|     apple|  109|   766|   544|  444|333|
+----------+-----+------+------+-----+---+

Я хочу отменить его, оставив фиксированными в виде нескольких столбцов, таких как

import spark.implicits._
    val unPivotDF = testData.select($"product",$"german", expr("stack(4, 'china', china, 'usa', usa, 'france', france,'india',india) " +
      "as (Country,Total)"))
    unPivotDF.show()

, что дает ниже o / p:

+----------+------+-------+-----+
|   product|german|Country|Total|
+----------+------+-------+-----+
|     beans|   210|  china|  496|
|     beans|   210|    usa|  119|
|     beans|   210| france|  200|
|     beans|   210|  india|  234|
|    banana|   234|  china| null|
|    banana|   234|    usa|  122|
|    banana|   234| france|  345|
|    banana|   234|  india|  123|
|starwberry|   246|  china|  340|
|starwberry|   246|    usa|  321|
|starwberry|   246| france|  430|
|starwberry|   246|  india|  111|

, что идеально, но этот фиксированный столбец, такой как product и german , является информацией времени выполнения, поэтому напрямую я не могу использовать имена col в операторе select
Так что я делал

val fixedCol= List[String]()
fixedCol= "german" :: fixedCol
fixedCol= "product" :: fixedCol

val col= df.select(fixedCol:_*,expr("stack(.......)") //it gives error as first argument of select is fixed and second arg is varargs

Я знаю, что это можно сделать с помощью, но я не могу использовать sql:

val ss= spark.createOrReplaceTempView(df)
spark.sql("select.......")

Есть ли другой способ сделать его динамичным c

1 Ответ

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

Преобразование всех имен столбцов и exp в Список [Столбец]

val fixedCol : List[Column] = List(col("german") , col("product") , expr("stack(.......)"))
    df.select(fixedCol:_*) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...