У меня есть один фрейм данных, который имеет много столбцов почти 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()