【问题标题】:Spark sorting of delimited data分隔数据的 Spark 排序
【发布时间】:2014-07-15 20:46:39
【问题描述】:

我是 Spark 的新手。你能知道下面的代码有什么问题吗:

val rawData="""USA | E001 | ABC DE | 19850607 | IT | $100
UK | E005 | CHAN CL | 19870512 | OP | $200
USA | E003 | XYZ AB | 19890101 | IT | $250
USA | E002 | XYZ AB | 19890705 | IT | $200"""
val sc = ...     
val data= rawData.split("\n")
val rdd= sc.parallelize(data)
val data1=rdd.flatMap(line=> line.split(" | "))
val data2 = data1.map(arr => (arr(2), arr.mkString(""))).sortByKey(false)
data2.saveAsTextFile("./sample_data1_output")

这里,.sortByKey(false) 不起作用,编译器给我错误:

[error] /home/admin/scala/spark-poc/src/main/scala/SparkApp.scala:26: value sortByKey is not a member of org.apache.spark.rdd.RDD[(String, String)]
[error] val data2 = data1.map(arr => (arr(2), arr.mkString(""))).sortByKey(false) 

问题是如何获取MappedRDD?或者我应该在什么对象上调用 sortByKey()?

【问题讨论】:

  • 你能粘贴完整/实际的编译器输出吗?
  • [错误] /home/admin/scala/spark-poc/src/main/scala/SparkApp.scala:26:值 sortByKey 不是 org.apache.spark.rdd.RDD 的成员[(String, String)] [error] val data2 = data1.map(arr => (arr(2), arr.mkString(""))).sortByKey(false)

标签: scala apache-spark scala-2.10


【解决方案1】:

Spark 对 RDD 对提供了额外的操作,例如 sortByKey()。这些操作可通过一个名为 PairRDDFunctions 的类获得,Spark 使用隐式转换来自动执行 RDD -> PairRDDFunctions 包装。

要导入隐式转换,请将以下几行添加到程序顶部:

import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._

这在 Spark 编程指南的 Working with key-value pairs 部分中进行了讨论。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-30
    • 2015-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多