Как объединить текстовые файлы, используя сопоставление и сокращение в Java Spark MLLib?

У меня есть очень большой набор данных, хранящийся в Hadoop (кластер YARN), на котором я хочу обучить классификатор машины опорных векторов. Функции извлекаются из каждой точки данных из набора данных и сохраняются в LibSVM. Spark MLLib может читать эти файлы, используя MLUTils.LoadLibSVMFile (контекст JavaSparkContext, каталог String). Каждый файл имеет одну строку с двойными символами, заканчивающимися символом новой строки. Линия представляет значения признаков.

Я хочу объединить все эти файлы в JavaRDD. Могу ли я использовать .textFile("../*") с каким-либо оператором .join или .union? Я не понимаю, как это сделать...

Не могли бы вы быть так добры помочь? Я думаю, что больше людей хотели бы знать, как сделать это эффективно.


person blpasd    schedule 29.04.2015    source источник


Ответы (1)


SparkContext.textFile("/path/to/file/*") прочитает все соответствующие файлы и представит вам один большой RDD.

И я думаю, что MLUtils.LoadLibSVMFile(sc, "/path/to/file/*") загрузит все ваши функции для вас. Ты пытался?

person David S.    schedule 29.04.2015
comment
Вы правы :) MLUtils.LoadLibSVMFile(sc, /path/to/file/*) действительно загружает все функции, которые мне нужны. Возможно, вы также знаете, где я могу найти версию ядра RBF для Spark или людей, с которыми мы можем сделать такое расширение для линейного ядра уже доступным? - person blpasd; 29.04.2015
comment
Я думаю, что люди уже работают над этим. Надеюсь, у вас хватит терпения :) - person David S.; 30.04.2015
comment
Спасибо за ссылку! У меня есть терпение, но я также хочу поделиться своими знаниями :) Но он написан на Scala, поэтому я, вероятно, не смогу использовать его на Java? (Я пишу свой код на Java) - person blpasd; 30.04.2015
comment
Да, ты можешь. Вы можете смешивать Java и Scala в одном проекте, и многие IDE могут распознавать и компилировать по отдельности. - person David S.; 01.05.2015
comment
Возможно, вы знаете, что означает вывод SVMModel.predict() *? Значения, как показано ниже, не имеют для меня никакого смысла. Также отсутствует документация... *spark.apache.org/docs/latest/api/java/org/apache/spark/mllib/ -18,841544889249917 0,0 168,32916035523283 1,0 420,6776391458797 1,0 -974,1942589201286 0,0 71,73602841256813 1,0 233,13636224524993 1,0 -1000,5902168199027 0,0 - person blpasd; 01.05.2015
comment
@romusters, это другое, вам следует открыть новую тему. На ваш вопрос возвращенный Double — это метка - person David S.; 02.05.2015
comment
Спасибо за ваш ответ. Я действительно проверил документацию, как всегда делает хороший студент, прежде чем задавать вопросы ;) и обнаружил, что это ярлык. Однако метка класса 168... не принадлежит к доступному классу, который может быть 1 или 0. Я вижу, что если оценка ближе к 0 или 1, метка также будет 0 или 1 соответственно. Я начал новую ветку, как вы предложили :) title="что означает оценка вывода spark mllib svm"> stackoverflow.com/questions/30029863/ - person blpasd; 04.05.2015