Как использовать group by для нескольких столбцов с количеством? - PullRequest
1 голос
/ 10 июня 2019

У меня есть файл с именем tags(UserId,MovieId,Tag) в качестве входных данных для алгоритма и преобразование его в таблицу с помощью registerTempTable. val orderedId = sqlContext.sql("SELECT MovieId AS Id,Tag FROM tag ORDER BY MovieId") этот запрос дает мне файл состоит из Id, тег в качестве ввода для второго шага val eachTagCount =orderedId.groupBy(" Id,Tag").count() но появляется ошибка

case class DataClass( MovieId:Int,UserId: Int, Tag: String)
// Create an RDD of DataClass objects and register it as a table.
val Data = sc.textFile("file:///usr/local/spark/dataset/tagupdate").map(_.split(",")).map(p => DataClass(p(0).trim.toInt, p(1).trim.toInt, p(2).trim)).toDF()
Data.registerTempTable("tag")
val orderedId = sqlContext.sql("SELECT MovieId AS Id,Tag FROM tag ORDER BY MovieId")
orderedId.rdd
  .map(_.toSeq.map(_+"").reduce(_+","+_))
  .saveAsTextFile("/usr/local/spark/dataset/algorithm3/output")
  val eachTagCount =orderedId.groupBy(" Id,Tag").count()
eachTagCount.rdd
 .map(_.toSeq.map(_+"").reduce(_+","+_))
 .saveAsTextFile("/usr/local/spark/dataset/algorithm3/output2")

Исключение:

Caused by: org.apache.spark.sql.AnalysisException: Cannot resolve column name " Id,Tag" among (Id, Tag);
    at org.apache.spark.sql.DataFrame$$anonfun$resolve$1.apply(DataFrame.scala:152)
    at org.apache.spark.sql.DataFrame$$anonfun$resolve$1.apply(DataFrame.scala:152)
    at scala.Option.getOrElse(Option.scala:121)

как решить эту ошибку?

1 Ответ

1 голос
/ 10 июня 2019

Попробуйте это val eachTagCount = orderId.groupBy ("Id", "Tag"). Count ().Вы используете одну строку для нескольких столбцов.

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