如何使用Spark的map转换在Scala中返回多个键值对?

简·韦恩

我是Scala和Spark的新手。我正在尝试在地图转换期间返回多个键值对。我的输入数据是一个简单的CSV文件。

1,2,3 
4,5,6 
7,8,9

我的Scala脚本如下所示。

class Key(_i:Integer, _j:Integer) {
 def i = _i
 def j = _j
}
class Val(_x:Double, _y:Double) {
 def x = _x
 def y = _y
}
val arr = "1,2,3".split(",")
for(i <- 0 until arr.length) {
 val x = arr(i).toDouble
 for(j <- 0 until arr.length) {
  val y = arr(j).toDouble
  val k = new Key(i, j)
  val v = new Val(x, y)
  //note that i want to return the tuples, (k, v)
 }
}

我希望能够使用上面的for循环和数据结构返回多个元组(k,v)。类似于下面的代码。

val file = sc.textFile("/path/to/test.csv")
file.map(line => {
 val arr = line.split(",")
 for(i <- 0 until arr.length) {
  val x = arr(i).toDouble
  for(j <- (i+1) until arr.length) {
   val y = arr(j).toDouble
   val k = new Index(i,j)
   val v = new Val(x,y)
   (k,v)
  }
 }
}).collect //reduceByKey is not there, reduce is there, but not what i want

当我将上面的代码复制/粘贴到lambda表达式中(并在Scala REPL shell上运行)时,出现以下错误:

错误:简单表达式的非法启动
val arr = line.split(“,”)
^

我也意识到我仍然停留在命令式/过程式编程思想中,所以请耐心等待(和Scala / Spark的新手)。

贾斯汀·皮洪尼(Justin Pihony)

您忘记了箭头后面的括号。如果它是一个简单表达式(一个表达式),则只能忽略它们。

file.map(line => {
    //multiple lines of code here
})

编辑后的完整答案:

case class Index(i:Integer, j:Integer)
case class Val(x:Double, y:Double)

val data = sc.parallelize(List("1,2,3", "4,5,6", "7,8,9"))
data.flatMap(line=>{
val arr = line.split(",")
 val doubleSeq = for(i <- 0 until arr.length) yield {
  val x = arr(i).toDouble
  for(j <- (i+1) until arr.length) yield {
   val y = arr(j).toDouble
   val k = Index(i,j)
   val v = Val(x,y)
   (k,v)
  }
 }
 doubleSeq.flatten
})

实际上有很多问题:

  • 注意,我将您的类更改为案例类,因为它们是可序列化的。否则,您将需要实施Serializable
  • 我更改mapflatMap,以及flattened数组,因为flatMap仍然会留下一个内部数组。现在,两者的结合将为您带来,您RDD[(Index, Val)]现在可以将其隐式地与reduceByKey
  • 通过使用将您的for循环变成了一种for理解yield您得到的最终类型是Unit因为for循环的返回类型Unit

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用Spark的地图转换在Scala中返回多个键值对?

来自分类Dev

在Spark Scala中使用map()对键值对重新排序

来自分类Dev

如何在 Spark/Scala 数据导入中处理嵌套的键值对

来自分类Dev

使用scala和Spark将RDD中的每个记录转换为Array [Map]

来自分类Dev

如何使用map函数在python中为字典设置键值

来自分类Dev

如何在scala中根据map的键值对map的ArrayBuffer进行排序

来自分类Dev

将键值字符串转换为Scala Map的方法

来自分类Dev

如何在Spark中使用Scala从多个文件中删除前几行/标题

来自分类Dev

如何使用Scala在Spark中创建SQLContext?

来自分类Dev

如何使用Scala在Spark中处理日期?

来自分类Dev

Scala Spark 模型转换返回全零

来自分类Dev

Spark Scala中的数据转换

来自分类Dev

如何从Spark Scala中的多个数组创建DataFrame?

来自分类Dev

如何删除Scala Spark中的多个字符?

来自分类Dev

如何使用 Scala 语言将 Spark RDD 转换为 JSON

来自分类Dev

如何从Scala中的地图中删除键值

来自分类Dev

如何从Scala中的地图中删除键值

来自分类Dev

如何在 Scala 中以选项类型返回多个值?

来自分类Dev

如何转换/更新 defaultdict 中的键值信息?

来自分类Dev

如何比较字典列表中的多个键值?

来自分类Dev

如何在Redis中更新多个键值对

来自分类Dev

如何比较字典列表中的多个键值?

来自分类Dev

如何使用scala通过spark中的一个或多个字符串参数传递selectExpr中的列名?

来自分类Dev

将键值对添加到Scala中的Map

来自分类Dev

如何在 Scala 中将 Spark Dense Vector 转换为 String 并返回 Vector?

来自分类Dev

Spark SQL UDF使用df.WithColumn()返回scala不可变Map

来自分类Dev

如何使用scala从文件中读取输入并将文件的数据行转换为List [Map [Int,String]]?

来自分类Dev

如何使用映射的键值对将数组转换为javascript中的对象?

来自分类Dev

Spark中的键值对顺序

Related 相关文章

  1. 1

    如何使用Spark的地图转换在Scala中返回多个键值对?

  2. 2

    在Spark Scala中使用map()对键值对重新排序

  3. 3

    如何在 Spark/Scala 数据导入中处理嵌套的键值对

  4. 4

    使用scala和Spark将RDD中的每个记录转换为Array [Map]

  5. 5

    如何使用map函数在python中为字典设置键值

  6. 6

    如何在scala中根据map的键值对map的ArrayBuffer进行排序

  7. 7

    将键值字符串转换为Scala Map的方法

  8. 8

    如何在Spark中使用Scala从多个文件中删除前几行/标题

  9. 9

    如何使用Scala在Spark中创建SQLContext?

  10. 10

    如何使用Scala在Spark中处理日期?

  11. 11

    Scala Spark 模型转换返回全零

  12. 12

    Spark Scala中的数据转换

  13. 13

    如何从Spark Scala中的多个数组创建DataFrame?

  14. 14

    如何删除Scala Spark中的多个字符?

  15. 15

    如何使用 Scala 语言将 Spark RDD 转换为 JSON

  16. 16

    如何从Scala中的地图中删除键值

  17. 17

    如何从Scala中的地图中删除键值

  18. 18

    如何在 Scala 中以选项类型返回多个值?

  19. 19

    如何转换/更新 defaultdict 中的键值信息?

  20. 20

    如何比较字典列表中的多个键值?

  21. 21

    如何在Redis中更新多个键值对

  22. 22

    如何比较字典列表中的多个键值?

  23. 23

    如何使用scala通过spark中的一个或多个字符串参数传递selectExpr中的列名?

  24. 24

    将键值对添加到Scala中的Map

  25. 25

    如何在 Scala 中将 Spark Dense Vector 转换为 String 并返回 Vector?

  26. 26

    Spark SQL UDF使用df.WithColumn()返回scala不可变Map

  27. 27

    如何使用scala从文件中读取输入并将文件的数据行转换为List [Map [Int,String]]?

  28. 28

    如何使用映射的键值对将数组转换为javascript中的对象?

  29. 29

    Spark中的键值对顺序

热门标签

归档