Wir haben hive Lager und wollten Funken für verschiedene Aufgaben verwendet wird (vor allem Klassifikation). Schreiben Sie die Ergebnisse manchmal als Strukturtabelle zurück. Zum Beispiel haben wir die folgende Python-Funktion geschrieben, um die Gesamtsumme von originally_table column two, gruppiert nach original_table column one, zu finden. Die Funktion funktioniert, aber wir befürchten, dass sie ineffizient ist, insbesondere die zu konvertierenden Schlüssel/Wert-Paare und die Wörterbuchversionen. Funktionen combiner, mergeValue, mergeCombiner sind an anderer Stelle definiert, funktionieren aber gut.zu lesen und von hive Tabellen mit Funken nach der Aggregation Schreiben
from pyspark import HiveContext
rdd = HiveContext(sc).sql('from original_table select *')
#convert to key-value pairs
key_value_rdd = rdd.map(lambda x: (x[0], int(x[1])))
#create rdd where rows are (key, (sum, count)
combined = key_value_rdd.combineByKey(combiner, mergeValue, mergeCombiner)
# creates rdd with dictionary values in order to create schemardd
dict_rdd = combined.map(lambda x: {'k1': x[0], 'v1': x[1][0], 'v2': x[1][1]})
# infer the schema
schema_rdd = HiveContext(sc).inferSchema(dict_rdd)
# save
schema_rdd.saveAsTable('new_table_name')
Gibt es effizientere Möglichkeiten, dasselbe zu tun?
nicht sicher, warum Sie in eine rdd konvertieren müssen, aber wenn Sie darauf bestehen, können Sie einfach 'key_value_rdd.reduceByKey (Lambda x, y: Summe (x, y))' anstelle von 'combineByKey'. – mtoto