繁体   English   中英

在Spark Scala SQL中将行转换为列

[英]Transform rows to columns in Spark Scala SQL

我有一个数据库表,其中包含唯一的用户ID和单击的项目。
例如

用户ID,项目ID
1、345
1,78993
1,784
5、345
5、897
15,454

我想使用Spark SQL将数据转换为以下格式(如果可能,在Scala中)

用户ID,项目ID
1,345,78993,784
5、345,897
15,454

谢谢,

本地示例:

import org.apache.spark.sql.SQLContext
import org.apache.spark.sql.hive.HiveContext
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.sql.functions._


object Main extends App {

  case class Record(user: Int, item: Int)

  val items = List(
    Record(1 , 345),
    Record(1 , 78993),
    Record(1 , 784),
    Record(5, 345),
    Record(5, 897),
    Record(15, 454)
  )

  val sc = new SparkContext(new SparkConf().setAppName("test").setMaster("local"))
  val hiveContext = new HiveContext(sc)
  import hiveContext.implicits._
  import hiveContext.sql

  val df = sc.parallelize(items).toDF()
  df.registerTempTable("records")
  sql("SELECT * FROM records").collect().foreach(println)

  sql("SELECT user, collect_set(item) From records group by user").collect().foreach(println)
}

这将产生:

[1,ArrayBuffer(78993, 784, 345)]
[5,ArrayBuffer(897, 345)]
[15,ArrayBuffer(454)]

这是一个非常简单的groupByKey场景。 尽管如果您想在此之后做其他事情,那么我建议使用更高效的PairRDDFunction因为groupByKey对于后续查询效率不高。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM