2016-05-04 7 views
1

Ich arbeite derzeit mit Funken Streaming und Daten von meinem Kafka in Json erhalten. Ich konvertiere meine RDD in Dataframe und registrieren Sie es als Tabelle. Nachdem ich, dass, wenn ich eine Abfrage ausgelöst, wo der Spaltenname existiert nicht in dem Datenrahmen einen Fehler wieSpalte Namen nicht in Datenframe Funken

"'No such struct field currency in price, recipientId;'" 

HEre is my query 
val selectQuery = "lower(serials.brand) as brandname, lower(appname) as appname, lower(serials.pack) as packname, lower(serials.asset) as assetname, date_format(eventtime, 'yyyy-MM-dd HH:00:00') as eventtime, lower(eventname) as eventname, lower(client.OSName) as platform, lower(eventorigin) as eventorigin, meta.price as price, client.ip as ip, lower(meta.currency) as currency, cast(meta.total as int) as count" 

Here is my dataframe 
DataFrame[addedTime: bigint, appName: string, client: struct<ip:string>, eventName: string, eventOrigin: string, eventTime: string, geoLocation: string, location: string, meta: struct<period:string,total:string>, serials: struct<asset:string,brand:string,pack:string>, userId: string]> 

Nun meine Json ist nicht streng und es gibt Zeiten, einige Tasten nicht vorhanden sein wirft. Wie kann ich diese Ausnahme sicher umgehen, wenn die Schlüssel oder Spalten im Dataframe nicht vorhanden sind?

Antwort

0

So ist der einzige Weg, ich fand, war json Schema für Ihre json zu erstellen und dann dieses Schema verwenden Ihre json in datafrmae

val df = sqlcontext.read.schema (Schema) .json (RDD)

zu analysieren
1

Sie können df.columns verwenden, um Spalten zu überprüfen. Es gibt viele Möglichkeiten, den Spaltennamen und den Datentyp df.schema zu erhalten. Sie können auch das Schema df.printSchema()

protokollieren
Verwandte Themen