2017-05-19 97 views
0

我試圖用例類從文本文件具有「ID,姓名,國家」由saperated如下無法使用案例類

1)獲取數據轉換成RDD數據幀「」以RDD轉換成數據幀,但無標頭

val x = sc.textFile("file:///home/hdadmin/records.txt") 

2.)創建的情況下,類 「REC」 與如下頭定義:

case class rec(id:Int, name:String, country:String) 

3.)現在我定義的轉化

val y = x.map(x=>x.split(",")).map(x=>rec(x(0).toInt,x(1),x(2))) 

4.)接着我導入implicits庫

import spark.implicits._ 

5.)轉化RDD到數據幀使用toDF方法:

val z = y.toDF() 

6。)現在,當我嘗試獲取使用以下命令的記錄:

z.select("name").show() 

我收到以下錯誤:

17/05/19 12:50:14 ERROR LiveListenerBus: SparkListenerBus has already stopped! Dropping event SparkListenerSQLExecutionStart(9,show at :49,org.apache.spark.sql.Dataset.show(Dataset.scala:495) $line105.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.(:49) $line105.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.(:54) $line105.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.(:56) $line105.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.(:58) $line105.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.(:60) $line105.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.(:62) $line105.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.(:64) $line105.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.(:66) $line105.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.(:68) $line105.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw.(:70) $line105.$read$$iw$$iw$$iw$$iw$$iw$$iw.(:72) $line105.$read$$iw$$iw$$iw$$iw$$iw.(:74) $line105.$read$$iw$$iw$$iw$$iw.(:76) $line105.$read$$iw$$iw$$iw.(:78) $line105.$read$$iw$$iw.(:80) $line105.$read$$iw.(:82) $line105.$read.(:84) $line105.$read$.(:88) $line105.$read$.(),== Parsed Logical Plan == GlobalLimit 21 +- LocalLimit 21 +- Project [name#91] +- LogicalRDD [id#90, name#91, country#92]

== Analyzed Logical Plan == name: string GlobalLimit 21 +- LocalLimit 21 +- Project [name#91] +- LogicalRDD [id#90, name#91, country#92]

== Optimized Logical Plan == GlobalLimit 21 +- LocalLimit 21 +- Project [name#91] +- LogicalRDD [id#90, name#91, country#92]

== Physical Plan == CollectLimit 21 +- *Project [name#91] +- Scan ExistingRDD[id#90,name#91,country#92],[email protected],1495223414636) 17/05/19 12:50:14 ERROR LiveListenerBus: SparkListenerBus has already stopped! Dropping event SparkListenerSQLExecutionEnd(9,1495223414734) java.lang.IllegalStateException: SparkContext has been shutdown at org.apache.spark.SparkContext.runJob(SparkContext.scala:1863) at org.apache.spark.SparkContext.runJob(SparkContext.scala:1884) at org.apache.spark.SparkContext.runJob(SparkContext.scala:1897) at org.apache.spark.sql.execution.SparkPlan.executeTake(SparkPlan.scala:347) at org.apache.spark.sql.execution.CollectLimitExec.executeCollect(limit.scala:39) at org.apache.spark.sql.Dataset$$anonfun$org$apache$spark$sql$Dataset$$execute$1$1.apply(Dataset.scala:2183) at org.apache.spark.sql.execution.SQLExecution$.withNewExecutionId(SQLExecution.scala:57) at org.apache.spark.sql.Dataset.withNewExecutionId(Dataset.scala:2532) at org.apache.spark.sql.Dataset.org$apache$spark$sql$Dataset$$execute$1(Dataset.scala:2182) at org.apache.spark.sql.Dataset.org$apache$spark$sql$Dataset$$collect(Dataset.scala:2189) at org.apache.spark.sql.Dataset$$anonfun$head$1.apply(Dataset.scala:1925) at org.apache.spark.sql.Dataset$$anonfun$head$1.apply(Dataset.scala:1924) at org.apache.spark.sql.Dataset.withTypedCallback(Dataset.scala:2562) at org.apache.spark.sql.Dataset.head(Dataset.scala:1924) at org.apache.spark.sql.Dataset.take(Dataset.scala:2139) at org.apache.spark.sql.Dataset.showString(Dataset.scala:239) at org.apache.spark.sql.Dataset.show(Dataset.scala:526) at org.apache.spark.sql.Dataset.show(Dataset.scala:486) at org.apache.spark.sql.Dataset.show(Dataset.scala:495) ... 56 elided

問題出在哪裏?

回答

1

在爲幾個文本文件嘗試相同的代碼後,我實際上糾正了文本文件中的文本格式以避免任何不一致。

下面的代碼中的列分隔符是「,」我仔細掃描後,在文本文件中的一個地方丟失了。

val y = x.map(x=>x.split(",")).map(x=>rec(x(0).toInt,x(1),x(2))) 

該代碼工作正常,並給出了結果在結構化表格格式後的變化。

因此其需要注意的是分隔符(「」,‘\ t’,‘|’)給出的內部

x.split("") 

應該是相同的源文件和整個源文件。