2016-09-08 3 views
0

Ich verwende Spark-MongoDB und ich versuche, einen Datenrahmen in MongoDB zu speichern:Spark-Datenrahmen ist MongoDB in falschem Format gespeichert

val event = """{"Dev":[{"a":3},{"b":3}],"hr":[{"a":6}]}""" 
val events = sc.parallelize(event :: Nil) 
val df = sqlc.read.json(events) 
val saveConfig = MongodbConfigBuilder(Map(Host -> List("localhost:27017"), 
Database -> "test", Collection -> "test", SamplingRatio -> 1.0, WriteConcern -> "normal", 
SplitSize -> 8, SplitKey -> "_id")) 
df.saveToMongodb(saveConfig.build) 

ich die Daten erwartet als Eingabestring gespeichert werden, aber was tatsächlich gespeichert ist:

{ "_id": ObjectId ("57cedf4bd244c56e8e783a45"), "Dev": [{ "a": NumberLong (3), "b": null}, { "a" : null, "b": NummerLang (3)}], "hr": [{"a": NummerLang (6)}]}

Ich möchte diese Nullwerte und Duplikate vermeiden, Irgendeine Idee?

+0

Es gibt keine Duplikate hier und explizite 'NULL' erwartet wird. Dies ist genau ein Format, das Sie von einem analysierten JSON erhalten, wenn Sie dem Spark-Schema zugeordnet sind. – zero323

+0

Gibt es also eine Möglichkeit, es vor dem Speichern wieder auf das ursprüngliche Format (ohne Null) abzubilden? –

+0

Dies liegt daran, dass Sie die JSON-Daten in einen DataFrame importieren und das Schema für alle Daten festlegen. Wenn der Connector dies unterstützt, verwenden Sie stattdessen 'SparkContext' und speichern Sie die RDD. Sollte dies nicht der Fall sein, unterstützt https://docs.mongodb.com/spark-connector/ dies. – Ross

Antwort

0

Haben Sie Ereignis wie unter Verwendung von umgekehrten Schrägstrich definiert versucht:

val event = "{\"Dev\":[{\"a\":3},{\"b\":3}],\"hr\":[{\"a\":6}]}" 
Verwandte Themen