2017-06-09 111 views
0

具體結構我有一個dataframe DF可以保存爲json文件中的結構如下:{"id":"1234567890","score":123.0,"date":yyyymmdd}保存數據幀的JSON在星火斯卡拉

一審我保存它,如下所示:

df.write.format("json").save("path") 

這DF需要在以下結構id::1234567890\t{"id":"1234567890","score":123.0,"date":yyyymmdd}

我嘗試過各種方法來保存爲json文件,但不能這樣做。我們怎樣才能以所需的格式保存它?

Spark version: 1.6.0 
Scala version: 2.10.6 
+0

這個JSON甚至有效嗎?這是什麼'id :: 1234567890 \ t' – philantrovert

+0

當你已經有一個數據幀時,爲什麼你需要保存這樣的複雜情況,從中你可以隨時提取'id'和'row'作爲你的預期結果? –

回答

0

這不是json格式。您最好使用rdd,然後將其轉換爲該自定義格式。

final case class LineOfSomething(id: String, score: BigDecimal, date: String) 
import sqlContext.implicits._ 
df 
    .as[LineOfSomething] 
    .rdd 
    .mapPartitions(lines => { 
    val mapper = new com.fasterxml.jackson.databind.ObjectMapper() 
    mapper.registerModule(com.fasterxml.jackson.module.scala.DefaultScalaModule) 
    lines.map(line => { 
     val json = mapper.writeValueAsString(line) 
     s"id::${line.id}\t$json" 
    }) 
    }) 
    .saveAsTextFile(output) 
+0

Iam出現以下錯誤。可能是由於我使用火花的版本ie Spark 1.6.0:線程「main」中的異常org.apache.spark.sql.AnalysisException:無法爲內部類生成編碼器com.company.class.RowMapper $ LineOfSomething「而不訪問此類定義的範圍。請嘗試將此類從其父類中移出。 sql.catalyst.encoders.ExpressionEncoder $$ anonfun $ 2.applyOrElse(ExpressionEncoder.scala:264) \t at – qubiter

+0

你在主「對象」內部運行它嗎?如果不是,則將案例類移入其自己的文件中。 – Nils

+0

RowMapper與其他映射器和案例類是單獨的單例。我將這個新的案例類包含到RowMapper中。我仍然得到相同的錯誤。還看起來問題是數據集在底下?我不認爲1.6.0支持數據集? – qubiter