Im folgenden Beispiel habe ich eine Parkettdatei geladen, die einen verschachtelten Datensatz von Kartenobjekten im Feld meta
enthält. sparklyr
scheint sich gut damit zu beschäftigen. % Co_de% übersetzt jedoch nicht in SQL (oder HQL - verständlicherweise - wie tidyr::unnest
) und ist daher nicht verwendbar. Gibt es eine Möglichkeit, Daten auf andere Weise zu vereinheitlichen?
Es gibt auch ein Problem, wenn die Daten gesammelt werden. Zum Beispiel,
%Vor% Im obigen Beispiel enthält die LATERAL VIEW explode()
-Datei weiterhin meta
-Elemente anstelle von Listen, data.frames oder sogar JSON-Strings (so würde Hive solche Daten zurückgeben). Dies erzeugt eine Situation, in der spark_jobj
nicht einmal an den gesammelten Daten arbeitet.
Gibt es eine Möglichkeit, tidyr
besser mit sparklyr
zu arbeiten, die ich vermisse? Wenn nicht, ist dies für zukünftige tidyr
Entwicklung geplant?
Dies ist nicht genau eine richtige Lösung, jedoch besteht eine Umgehungslösung darin, Hive zu verwenden, um eine Tabelle oder Ansicht zu erzeugen (z. B. create view db_name.table_name as select ...
). das behandelt den explodierenden Vorgang. Dies dient dazu, flache Daten für sparklyr
zu bearbeiten. Wenn sc
eine Spark-Verbindung über sparklyr
ist, kann% ce_de% unter der Annahme verwendet werden, dass Hive konfiguriert ist, und die Ansicht wird dann angezeigt, wenn Tabellen mit DBI::dbGetQuery(sc, "USE db_name")
aufgelistet werden. Sobald Sie src_tbls(sc)
ausführen, sollte es von dort aus reibungsloser segeln.
Da dies keine dat <- tbl(sc, "table_name")
-Lösung ist (sondern eher eine Hive-Lösung), werde ich diese Antwort nicht akzeptieren.
Hier ist eine weitere Option, die nicht von Hive abhängt (zumindest so direkt, LATERAL VIEW explode()
ist eine Hive-Sache).
Ich werde diese Antwort auch nicht akzeptieren, da ich immer noch etwas wie:
sehen möchte %Vor%, aber das würde Unterstützung für verschachtelte Select-Anweisungen erfordern. Vielleicht würde etwas wie die tidyr::unnest
-Syntax den Trick machen: