2016-07-28 21 views
-1

I-Daten verarbeitet mit pySpark und sqlContext die folgende Abfrage verwenden:Daten speichern als Textdatei von Funken zu hdfs

(sqlContext.sql("select LastUpdate,Count(1) as Count" from temp_t) 
      .rdd.coalesce(1).saveAsTextFile("/apps/hive/warehouse/Count")) 

Es ist in folgendem Format gespeichert:

Row(LastUpdate=u'2016-03-14 12:27:55.01', Count=1) 
Row(LastUpdate=u'2016-02-18 11:56:54.613', Count=1) 
Row(LastUpdate=u'2016-04-13 13:53:32.697', Count=1) 
Row(LastUpdate=u'2016-02-22 17:43:37.257', Count=5) 

Aber ich will Speichern Sie die Daten in einer Hive-Tabelle als

LastUpdate       Count 

2016-03-14 12:27:55.01     1 
.          . 
.          . 

Hier ist, wie ich die Tabelle erstellen in Hive:

CREATE TABLE Data_Count(LastUpdate string, Count int) 
ROW FORMAT DELIMITED fields terminated by '|'; 

Ich versuchte viele Optionen, war aber nicht erfolgreich. Bitte helfen Sie mir dabei.

Antwort

1

eine Tabelle über die Daten aufbauen wollen Warum nicht die Daten in Hive laden selbst, ohne den Vorgang des Speicherns der Datei und dann das Laden in den Stock zu durchlaufen.

from datetime import datetime, date, time, timedelta 
hiveCtx = HiveContext(sc) 

#Create sample data 
currTime = datetime.now() 
currRow = Row(LastUpdate=currTime) 
delta = timedelta(days=1) 
futureTime = currTime + delta 
futureRow = Row(LastUpdate=futureTime) 
lst = [currRow, currRow, futureRow, futureRow, futureRow] 

#parallelize the list and convert to dataframe 
myRdd = sc.parallelize(lst) 
df = myRdd.toDF() 
df.registerTempTable("temp_t") 
aggRDD = hiveCtx.sql("select LastUpdate,Count(1) as Count from temp_t group by LastUpdate") 
aggRDD.saveAsTable("Data_Count") 
+0

danke, verwendet der gleiche Ansatz..aber die Daten werden gespeichert als 2016-03-14 12: 27: 55.01 2016-02-18 11: 56: 54.613 \t 1 nicht als Tabellenformat ... mit Spaltennamen und ich kann nicht abfragen wie wir auf Tabelle ex: dl commands – Prasad

+0

können Sie bitte ein Beispiel dl Befehle, die hier nicht funktionieren würde? –

0

Sie haben eine Tabelle erstellt, jetzt müssen Sie sie mit den von Ihnen generierten Daten füllen.

Dies könnte von einer Spark HiveContext ran, ich glaube

LOAD DATA INPATH '/apps/hive/warehouse/Count' INTO TABLE Data_Count 

Alternativ können Sie

CREATE EXTERNAL TABLE IF NOT Exists Data_Count(
    LastUpdate DATE, 
    Count INT 
    ) 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY '|' 
STORED AS TEXTFILE 
LOCATION '/apps/hive/warehouse/Count'; 
+0

Ich speicherte Ergebnis auf eine Variable (zB: Ergebnis) in Spark, nach dem Ausführen der obigen Abfrage, wenn ich result.show() ... Daten in 2 Spalten mit Rohr als Trennzeichen angezeigt wurde. Ja, ich habe "LOAD DATA INPATH"/Apps/Hive/Warehouse/Count "INTO TABLE Data_Count", aber das Ergebnis zeigt unter einer Spalte "LastUpdate" sowohl Datum und Anzahl, und andere Spalte "Count" zeigt als NULL. – Prasad

+0

Wenn Sie eine RDD anzeigen, wird sie mit einer Pipe formatiert. Es speichert keine Daten in einer Textdatei mit einer Pipe. Sie können die HDFS-Datei katalysieren, um das tatsächliche Trennzeichen zu überprüfen. Sie erhalten Null in der zweiten Spalte, weil alles in die erste Spalte geschoben wird –

+0

Hallo, überprüft .. wird durch "," abgegrenzt und wenn ich Ihre Abfrage entsprechend geändert und jetzt ausgeführt habe, bekomme ich beide Spalten als NULL – Prasad