Ho una lista di dizionari nidificati, ad es. ds = [{'a': {'b': {'c': 1}}}]
e si desidera creare una scintilla DataFrame da esso mentre inferendo schema di dizionari nidificati. Utilizzando sqlContext.createDataFrame(ds).printSchema()
mi da seguente schemaCreare Spark DataFrame dal dizionario nidificato
root
|-- a: map (nullable = true)
| |-- key: string
| |-- value: map (valueContainsNull = true)
| | |-- key: string
| | |-- value: long (valueContainsNull = true)
ma quello che mi serve è questo
root
|-- a: struct (nullable = true)
| |-- b: struct (nullable = true)
| | |-- c: long (nullable = true)
Il secondo schema può essere creato convertendo prima dizionari a JSON e poi caricarlo con jsonRDD
come questo sqlContext.jsonRDD(sc.parallelize([json.dumps(ds[0])])).printSchema()
. Ma questo sarebbe abbastanza ingombrante per file di grandi dimensioni.
Ho pensato di convertire i dizionari in oggetti pyspark.sql.Row()
sperando che il dataframe inferire lo schema, ma non ha funzionato quando i dizionari avevano schemi diversi (ad esempio prima mancava qualche chiave).
C'è un altro modo per farlo? Grazie!
volevo evitare che (vedi la mia domanda). Speravo ci fosse un modo per farlo senza dover creare RDD dai dizionari solo per ottenere il suo schema. – Marigold
Ci scusiamo per la mancanza del tuo paragrafo intermedio. Purtroppo, la funzione "deduci schema dal dizionario" ora è deprecata, spero che ci sia un altro modo. – hyim