Я пытаюсь достичь следующего фрейма данных:
-------------------------
| FOO | BAR | BAZ |
| lorem | ipsum | dolor |
| sit | amet | dolor |
| lorem | lorem | dolor |
-------------------------
Создать следующий вывод:
Map(
FOO -> List("lorem", "sit"),
BAR -> List("ipsum", "amet", "lorem"),
BAZ -> List("dolor")
)
Это код Scala, который я получилс:
val df = data.distinct
df.columns.map((key) => {
val distinctValues = df
.select(col(key))
.collect
.map(df => df.getString(0))
.toList
.distinct
(key, distinctValues)
}).toMap
Я пробовал близкую альтернативу этому коду, используя RDD, и почему-то они примерно на 30% быстрее, но проблема остается той же: все это чрезвычайно неэффективно.
Я запускаю Spark локально на локальной Cassandra, в которой размещен образец набора данных, состоящий всего из 1000 строк, но эти операции генерируют тонны и тонны журналов и занимают более 7 секунд.
Я что-то не так делаю, есть ли лучший способ сделать это?