2016-10-26 8 views
1

Ich bin die Verarbeitung von Daten mit Funken- und Scala, und es in jsonFunken 2.0.0 - JSON malformed Ausgang

df2.write.mode("overwrite").json("mydata") 

Die Ausgabe sieht wie folgt zu speichern:

{"GPS_LAT":xx.xxxxx,"GPS_LONG":xx.xxxxx,"count":10063} 
{"GPS_LAT":xx.xxxxx,"GPS_LONG":xx.xxxxx,"count":3142} 
{"GPS_LAT":xx.xxxxx,"GPS_LONG":xx.xxxxx,"count":7766} 

ich die Daten verwenden, um erstellen einer Visualisierung d3, mit d3.json mit:

d3.json("mydata.json", function(d){ 
       console.log(d) 
}; 

Mein Problem ist, dass d3.jsjson erwartet wie folgt formatiert werden:

[{"GPS_LAT":xx.xxxxx,"GPS_LONG":xx.xxxxx,"count":10063}, 
{"GPS_LAT":xx.xxxxx,"GPS_LONG":xx.xxxxx,"count":3142}, 
{"GPS_LAT":xx.xxxxx,"GPS_LONG":xx.xxxxx,"count":7766}] 

Wer falsch ist? Spark oder d3? Was kann ich tun, um diese Situation zu beheben, ohne manuell [,] hinzufügen zu müssen?

Antwort

2

Ich weiß nicht Spark, aber ich kann sagen, dass dies kein gültiger JSON ist, haben Sie nur eine Reihe von Objekten, die nicht in einem Array verpackt sind. Also, für "Wer ist falsch?", würde ich Spark sagen.

Aber es gibt einen (hässlichen) Workaround. Verwenden Sie d3.text zu laden, dass Sache (das Bündel von Objekten):

d3.text("data.json", function(data){}); 

Dann Ihre data ein String sein. Der nächste Schritt spaltet die Zeichenfolge durch neue Linien:

data = data.match(/[^\r\n]+/g); 

Und dann können wir dies von Objekten in einem Array umwandeln:

data = data.map(function(d){ 
    return JSON.parse(d) 
}); 

Alle zusammen:

d3.text("data.json", function(data){ 

    data = data.match(/[^\r\n]+/g); 
    data = data.map(function(d){ 
     return JSON.parse(d) 
    }); 
    //now you can use 'data' here 

}); 

Überprüfen Sie die Konsole in diesem Behälter: https://plnkr.co/edit/ER1oXyWZL62dwxlgaenP?p=preview

Und, jetzt, wo Sie eine Reihe von Objekten haben, Sie kann es an Ihren D3-Code weitergeben.

PS: Dies funktioniert möglicherweise nicht, wenn Sie Daten in den Daten haben.

+0

Das habe ich mir auch gedacht - Wie kann es sein, dass ein System wie Spark eine kaputte Ausgabe produziert ?! –

+0

Ich kann nicht sagen, wie ich dir gesagt habe, ich habe Spark nie benutzt ... lass uns warten, um die Meinung eines anderen zu sehen. –

+1

Da Ausgabe ist nicht JSON aber [JSON Lines] (http://jsonlines.org/) und dieses __expected__ Ergebnis in Spark. –

1

Wir haben auch eine kleine shell Skript:

sed -i '' 's/}/},/g' file # Add comma between each line 
sed -i '' '$ s/.$/]/' file # Replace last comma with ] 
sed -i '' '1s/^/[/' file # Add [ at beginning of file 

, dass die Behandlung funktioniert, ohne dass Sie Javascript um die Beinarbeit zu tun.