Я очень новичок в Spark, и у меня есть вопрос.Обработка нескольких «линий» в apache-spark RDD
Я пытаюсь сделать простой анализ настроения с некоторыми данными. В файле данных каждая строка содержит обзор продукта.
Вот мой код для обработки одной строки:
// wordlist
val pos_file = "/user/cloudera/Data/pos_list.txt"
val neg_file = "/user/cloudera/Data/neg_list.txt"
val pos_words = sc.textFile(pos_file).cache().collect().toSet
val neg_words = sc.textFile(neg_file).cache().collect().toSet
val test_string = "Line with positive or negative review."
val test_rdd = sc.parallelize(List(test_string))
val test_rdd2 = test_rdd.flatMap(line => "[a-zA-Z]+".r findAllIn line map (_.toLowerCase))
val pos = test_rdd2.filter(x => pos_words contains x)
val neg = test_rdd2.filter(x => neg_words contains x)
Мой вопрос теперь, как обрабатывать каждую запись в РДУ (в данном случае 3):
val file_in = "/user/cloudera/Data/teststring.txt"
val data = sc.textFile(file_in).cache()
val reviews = data.flatMap(_.split("\n"))
scala> reviews.count()
res29: Long = 3
Следующий код
val reviews2 = reviews.flatMap(line => "[a-zA-Z]+".r findAllIn line map (_.toLowerCase))
дает мне все слова. Я хочу получить значения для pos и neg для каждой строки/обзора. Вычисление довольно просто: если слово находится в наборе pos_words/neg_words, тогда положите его в pos/neg. На самом деле, я просто считаю, что встречаются положительные или отрицательные слова.
Как получить что-то вроде ('line', 'posvalue', 'negvalue')?
Большое спасибо заранее
эта строка в обзоре2 даст вам все слова в строке, а не куммированное значение pos/neg. Не знаете, как рассчитываются ваши оценки. Не могли бы вы обновить свой пример? – maasg
Да, вы правы. Если я загружаю текстовый файл, каждая строка в текстовом файле является обзором. Я хочу получить значения для pos и neg для каждой строки/обзора. Вычисление довольно просто: если слово находится в наборе pos_words/neg_words, тогда положите его в pos/neg. На самом деле, я просто считаю, что встречаются положительные или отрицательные слова. Моя проблема в том, что отзывы2 содержат слова всех отзывов, поэтому я не могу подсчитать слова одной строки. – bademaster