【问题标题】:Error in running Scala and Spark运行 Scala 和 Spark 时出错
【发布时间】:2016-12-19 20:07:21
【问题描述】:

我使用 Scala 2.11.8 和 Spark 2.0.1 来运行我的代码。在这行代码中:

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext

object training {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("test").setMaster("local[4]") 
    val sc = new SparkContext(conf)
    val data = sc.textFile("/home/ahoora/data.csv")

    // create RDDs from data in form (user, product, price)
    data.map(line => line.split(",")).map(purchaserecord => (purchaserecord(0), purchaserecord(1), purchaserecord(2)))

    // Our total revenue
    val totalRevenue = data.map{ case (user, product, price) => price.toDouble}.sum()
    sc.stop()
  }
}

此代码基于 Scala 2.10.x 和 Spark 1.X,我认为错误是因为版本控制。 我从 .csv 文件中读取数据,将其拆分为(用户、产品、价格)作为 RDD。一切都是正确的,但这里的方法toDouble 没有解决。这样做的正确方法是什么?

数据在表格中

阿里,食物,123

在 .csv 文件中

【问题讨论】:

  • 你重新编译代码了吗?如果您使用在 scala 2.10.x 中编译的代码,则会导致问题。另外,价格类型是什么?如果您从某个地方读取它,它可能已被转换为不受支持的类型。例如,如果价格是不是双精度的字符串,则可能会导致问题。此外,如果字符串为空,则可能会导致类似问题。您的确切错误信息是什么?
  • 请添加您遇到的错误和足够的代码来重现您的问题。

标签: scala apache-spark


【解决方案1】:

您使用的是原始的data(类型为RDD[String]),而不是通过将字符串拆分为三元组(类型为RDD[(String, String, String)])创建的修改后的RDD。 RDD 是不可变的,如果您想使用转换的结果(如 map),您需要使用从该转换返回的值:

val data = sc.textFile("/home/ahoora/data.csv")

// create RDDs from data in form (user, product, price)
val split = data.map(line => line.split(",")).map(purchaserecord => (purchaserecord(0), purchaserecord(1), purchaserecord(2)))

// Our total revenue
val totalRevenue = split.map{ case (user, product, price) => price.toDouble}.sum() 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-16
    • 2021-08-06
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-16
    相关资源
    最近更新 更多