Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何将包含3列的关系数据集转换为二维稀疏矩阵?_Scala_Apache Spark - Fatal编程技术网

Scala 如何将包含3列的关系数据集转换为二维稀疏矩阵?

Scala 如何将包含3列的关系数据集转换为二维稀疏矩阵?,scala,apache-spark,Scala,Apache Spark,我将spark 2.0.0与scala 2.11结合使用 我有一个数据框,它有3列: object_id category_id count 1 653 5 1 78 1 1 28 6 2 63 2 3 59 7 如何将其转换为这种格式 1 653:5 78:1 28:6 2 63:2 3 5

我将spark 2.0.0与scala 2.11结合使用

我有一个数据框,它有3列:

object_id  category_id   count
1          653           5
1          78            1
1          28            6
2          63            2
3          59            7
如何将其转换为这种格式

1 653:5 78:1 28:6
2 63:2
3 59:7
使用RDD干杯

yourDS.rdd
  .map(row => (row.getInt(0), row.getInt(1), row.getInt(2)))
  .grou‌​pBy({ (oid, cid, c) => iod })
  .map({ 
    (oid, iter) => (oid, iter.foldLeft("")((a‌​cc, tup) => acc + " " + tup._2 + ":" + tup._3))
  })
  .toDF("id", "hash")

留在数据集世界会有点困难,因为您必须合并列。

我的方法使用
DataFrame
s而不是
RDD
s,因此它与其他答案不同

import org.apache.spark.sql.functions._
import org.apache.spark.sql.types.StringType
import scala.collection.mutable.WrappedArray


val a = sc.parallelize(Array(
  (1, 653, 5),
  (1, 78, 1),
  (1, 28, 6),
  (2, 63, 2),
  (3, 59, 7)
)).toDF("object_id", "category_id", "count")

val x = a.select(col("object_id"), concat(col("category_id"), lit(":") , col("count")).as("res"))

def concat_things(a: WrappedArray[String]) = a.reduce(_ + " " + _)

val conUDF = udf(concat_things _, StringType)

x.groupBy("object_id").agg(collect_list(col("res")).as("res")).select(col("object_id"), conUDF(col("res"))).show()

//+---------+---------------+
//|object_id|       UDF(res)|
//+---------+---------------+
//|        1|653:5 78:1 28:6|
//|        3|           59:7|
//|        2|           63:2|
//+---------+---------------+

你可以在上面检查这个答案。

不想让这个家伙没有答案-结果是
透视
功能在一个
groupBy
后完全符合我的要求

数据集
.groupBy(“对象id”)
.pivot(“类别id”,所有类别id列表)

您尝试了什么?:)@eliasah看起来像个-为什么要努力?写关于stackoverflow的问题。让别人来解决我的问题。
yourDS.rdd.map(row=>(row.getInt(0),row.getInt(1),row.getInt(2)).groupBy({(oid,cid,c)=>iod}.map({(oid,iter)=>(oid,iter.foldLeft(“”)(acc,tup=>acc+tup.\u2+“:“+tup.\u3))
@SarveshKumarSingh我把我的答案贴在下面了。这个问题来自我刚接触Spark的时候:)