Привет, я пытаюсь подсчитать максимальное значение в данной задаче, используя строку ввода. Решение проблемы: для двух месяцев x и y, где y> x, найдите имя хэштега, которое больше всего увеличило количество твитов с месяца x до месяца y. Мы уже написали код в вашем шаблоне кода, который считывает значения x и y с клавиатуры. Игнорируйте твиты в месяцах между x и y, поэтому просто сравните количество твитов в месяц x и в месяц y. Сообщите название хэштега, количество твитов в месяцах x и y. Игнорируйте любые имена хэштегов, для которых не было твитов ни в месяц x, ни в y. Вы можете предположить, что комбинация хэштега и месяца уникальна. Выведите результат на вывод терминала с помощью println. Для приведенного выше небольшого примера набора данных вывод должен быть следующим:
Input x = 200910, y = 200912
Output hashtagName: mycoolwife, countX: 1, countY: 500
Data Fomrat:
Token type Month count Hash Tag Name
hashtag 200910 2 Babylove
hashtag 200911 2 babylove
hashtag 200912 90 babylove
Моя попытка:
// Load the input data and split each line into an array of strings
val twitterLines = sc.textFile("hdfs:///user/ashhall1616/bdc_data/twitter-small.tsv")
val twitterdata = twitterLines.map(_.split("\t"))
// Each month is a string formatted as YYYYMM
val x = scala.io.StdIn.readLine("x month: ")
val y = scala.io.StdIn.readLine("y month: ")
val matchmonth= twitterdata.map(r => (r(0)== x ,r(0)==y, r(2), r(3))).sortBy(_._3, false)
if(matchmonth.(r => (r(0))) < matchmonth.(r => (r(1)))
{
val ht1 = matchmonth.map(r => (r(2), r(3))).take(1)
val ht2 = matchmonth.map(r => (r(2), r(3))).take(1,2)
println("[" + ht1 + "," + ht2 + "]")
}
получение ошибок:
val matchmonth= twitterdata.map(r => (r(0)== x ,r(0)==y, r(2), r(3))).sortBy(_._3, false)
matchmonth: org.apache.spark.rdd.RDD[(Boolean, Boolean, String, String)] = MapPartitionsRDD[20] at sortBy at <console>:32
scala> if(matchmonth.(r => (r(0))) < matchmonth.(r => (r(1)))
<console>:1: error: identifier expected but '(' found.
if(matchmonth.(r => (r(0))) < matchmonth.(r => (r(1)))
^
<console>:1: error: identifier expected but '(' found.
if(matchmonth.(r => (r(0))) < matchmonth.(r => (r(1)))
^
scala> {
| val ht1 = matchmonth.map(r => (r(2), r(3))).take(1)
| val ht2 = matchmonth.map(r => (r(2), r(3))).take(1,2)
| println("[" + ht1 + "," + ht2 + "]")
| }
<console>:36: error: (Boolean, Boolean, String, String) does not take parameters
val ht1 = matchmonth.map(r => (r(2), r(3))).take(1)
^
<console>:36: error: (Boolean, Boolean, String, String) does not take parameters
val ht1 = matchmonth.map(r => (r(2), r(3))).take(1)
^
<console>:37: error: (Boolean, Boolean, String, String) does not take parameters
val ht2 = matchmonth.map(r => (r(2), r(3))).take(1,2)
^
<console>:37: error: (Boolean, Boolean, String, String) does not take parameters
val ht2 = matchmonth.map(r => (r(2), r(3))).take(1,2)
может кто-то посмотрите, что здесь не так?