2016-12-19 6 views
0

私は、コードを実行するためにScala 2.11.8とSpark 2.0.1を使用します。このコード行では:ScalaとSparkを実行する際のエラー

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に基づいていますが、バージョン管理のためにエラーが発生していると思います。 RCSとして(ユーザー、製品、価格)で分割した.csvファイルからデータを読み取りました。すべてのことは正しいが、ここでは方法toDoubleは解決されていない。それを行う正しい方法は何ですか?

データは、あなたは、元の(RDD[String]を入力した場合)dataなく変更RDDを使用している

+0

あなたの問題を再現するために、あなたが持っているエラーと十分なコードを追加してください:RDDSはあなたがその変換から返された値を使用する必要があります変換(のようなmap)の結果を使用したい場合は、不変です。 – maasg

+0

コードを再コンパイルしましたか? scala 2.10.xでコンパイルされたコードを使用すると、問題が発生します。また、価格の種類は何ですか?どこかから読んだら、サポートされていないタイプに変換されている可能性があります。たとえば、priceが2倍でない文字列の場合、問題が発生する可能性があります。また、stringがnullの場合、同様の問題が発生する可能性があります。正確なエラーメッセージは何ですか? –

答えて

1

は、分割により作成した.csvファイルに形式で

アリ、食品、123

です文字列を3タプル(型はRDD[(String, String, String)])に変換します。

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() 
関連する問題