我是Spark和Hive的新手,我的目標是將分隔符(讓我們說csv)加載到Hive表。經過一番閱讀後,我發現將數據加載到Hive的路徑是csv->dataframe->Hive
(如果我錯了,請糾正我)。RDD [數組[String]]到Dataframe
CSV:
1,Alex,70000,Columbus
2,Ryan,80000,New York
3,Johny,90000,Banglore
4,Cook, 65000,Glasgow
5,Starc, 70000,Aus
我讀的CSV文件中使用以下命令:
val csv =sc.textFile("employee_data.txt").map(line => line.split(",").map(elem => elem.trim))
csv: org.apache.spark.rdd.RDD[Array[String]] = MapPartitionsRDD[29] at map at <console>:39
現在,我想這RDD到數據幀轉換和使用下面的代碼:
scala> val df = csv.map { case Array(s0, s1, s2, s3) => employee(s0, s1, s2, s3) }.toDF()
df: org.apache.spark.sql.DataFrame = [eid: string, name: string, salary: string, destination: string]
員工的情況下,類,我用它作爲模式定義。
case class employee(eid: String, name: String, salary: String, destination: String)
然而,當我做df.show
我得到以下錯誤:
org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 10.0 failed 4 times, most recent failure: Lost task 0.3 in stage 10.0 (TID 22, user.hostname): scala.MatchError: [Ljava.lang.String;@88ba3cb (of class [Ljava.lang.String;)
我期待一個數據幀作爲輸出。我知道爲什麼我可能會收到此錯誤,因爲RDD中的值存儲在Ljava.lang.String;@88ba3cb
格式中,我需要使用mkString
來獲取實際值,但我無法找到如何執行此操作。我感謝你的時間。
也許您可以與我們分享您的員工是如何定義的? – Psidom
opps對不起,員工是案例類'case class employee(eid:String,name:String,salary:String,destination:String)' – Explorer
您將所有內容解析爲'String',因此您的'eid:Int'不會工作 –