Я просто хочу дать набору данных с миллиардами данных тег сортированного номера строки, что делать в Spark? - PullRequest
1 голос
/ 10 мая 2019

У меня есть миллиарды данных в формате hdf, теперь я хочу загрузить данные с помощью Spark, а затем присвоить каждой записи тег сортированного номера, как в облаке я пишу код, чтобы добиться максимальной эффективности?

Давайте рассмотрим, например, этот набор данных:

100.0
120.0
400.0
500.0
20.0
12.0
33.0
...
8.0
9.0
...

Результат, который я просто хочу получить:

0.0 1
1.0 2
5.0 3
8.0 4
9.0 5
...
27898880 2500000
27898893 2500001
....

Я пробовал оконную функцию row_number() в SparkSQL, как показано ниже, но он не может использовать многоядерные, он просто работает в одноядерном, поэтому он такой медленный.

select
    score,
    row_number() over(order by score) as sort
from
    my_score_data

1 Ответ

1 голос
/ 11 мая 2019

Как вы упомянули, не разделенное окно не является хорошей идеей. Действительно, он не только монофонический, но и создает много случайностей. Все данные оказываются в одном разделе и, следовательно, в одном узле, что может вызвать ошибку нехватки памяти (и, скорее всего, будет с большими наборами данных).

Чтобы решить вашу проблему, в Spark есть несколько решений. Самый простой - использовать RDD API. Если вам нужны последовательные индексы, вы можете использовать zipWithIndex. Это намного эффективнее, чем окно. Это вызывает простую искровую работу.

val rdd = sc
    .textFile("hdfs:///pathToFile/file.txt")
    .sortBy(identity) // just in case you want sorted data
val tupleRDD = rdd.zipWithIndex // A rdd of tuple, the index is at the 2nd place
val stringRDD = tupleRDD.map(t => t._1 + " " + t._2) // we can also create a string

Если вам не нужны последовательные индексы, а только увеличивающиеся индексы (с возможными пробелами), вы можете использовать zipWithUniqueId() вместо этого. Он не вызывает искровую работу и поэтому будет чрезвычайно эффективным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...