Сводка на основе группировки и сохранения всех других столбцов - PullRequest
0 голосов
/ 26 октября 2018

У меня есть один фрейм данных, который имеет много столбцов почти 100 плюс (как показано ниже),

+----+----+---+----+----+---+----+---+----+----+---+...
|c1  |c2  |c3 |c4  |c5  |c6  |c7 |c8 |type|clm |val |...
+----+----+---+----+----+---+----+---+----+----+---+...
|  11| 5.0|3.0| 3.0| 3.0|4.0| 3.0|3.0| t1 | a  |5   |...
+----+----+---+----+----+---+----+---+----+----+---+...
|  31| 5.0|3.0| 3.0| 3.0|4.0| 3.0|3.0| t2 | b  |6   |...
+----+----+---+----+----+---+----+---+----+----+---+...
|  11| 5.0|3.0| 3.0| 3.0|4.0| 3.0|3.0| t1 | a  |9   |...
+----+----+---+----+----+---+----+---+----+----+---+...

Я хочу преобразовать одно из значений столбца во множество столбцов, поэтому подумайте над использованием приведенного ниже кода:

df.groupBy("type").pivot("clm").agg(first("val")).show() 

Это преобразование значений строки в столбцы, но другие столбцы (c1 до c8) не приходят как результирующий кадр данных части.

Когда я сгруппирован по всем 100 столбцам, он работал, но занимал слишком много времени для обработки.

df.groupBy("c1","c2","c3","c4","c5","c6","c7","c8","c100","type").pivot("clm").agg(first("val")).show()

Когда я попробовал метод ниже, он был немного быстрее, но он создал так много столбцов.Почти отличается от (clm) * всех остальных столбцов, поэтому почти 500 столбцов.

df.groupBy("type")
  .pivot("clm").first("val"), 
  .agg(
    first("c1"),
    first("c2"),
    first("c3"),
    first("c4"),
    first("c5"),
    first("c6"),
    first("c7"),
    first("c8"),
    first("c100"),
  ).show()
...