2016-07-15 18 views
2

Ich versuche, eine Analyse mit Funken zu tun. Ich habe die gleiche Abfrage mit foreach versucht, die die Ergebnisse korrekt zeigt, aber wenn ich show oder in sql benutze, ist es seltsam, es zeigt nichts.Ergebnisanzeige seltsam mit sql: Spark

sqlContext.sql("select distinct device from TestTable1 where id = 23233").collect.foreach(println) 

[ipad] 
[desktop] 
[playstation] 
[iphone] 
[android] 
[smarTv] 

gibt richtige Gerät, aber wenn ich zeigen, verwenden Sie einfach oder jede SQL:

sqlContext.sql("select distinct device from TestTable1 where id = 23233").show() 

%sql 
select distinct device from TestTable1 where id = 23233 

+-----------+ 
|device  | 
+-----------+ 
|  | 
| | 
|ion| 
|  | 
| | 
|  | 
+-----------+ 

I Diagramm und Diagramme benötigen, also ich möchte% SQL verwenden. Aber das ergibt seltsame Ergebnisse mit $ sql. Hat jemand eine Idee, warum ich so komme?

+0

Gibt es etwas Besonderes in Ihren Daten, wie ein unsichtbares Präfix? sqlContext.sql ("Wählen Sie einen bestimmten Job aus der Bank"). show work perfect auf Zeppelin Tutorial Notebook. –

Antwort

0

show ist eine formatierte Ausgabe Ihrer Daten, während collect.foreach(println) lediglich die Daten druckt. Sie sind zwei verschiedene Dinge. Wenn Sie Ihre Daten auf eine bestimmte Art formatieren möchten, dann bleiben Sie bei foreach ... mit dem Gedanken, dass Sie eine Sequenz von drucken. Sie müssen die Daten aus der Zeile ziehen, wenn Sie für jede Spalte eine eigene Formatierung erhalten möchten.

Ich kann wahrscheinlich genauere Informationen zur Verfügung stellen, wenn Sie die Version von Spark und Zeppelin angeben, die Sie verwenden.

0

Sie haben angegeben, dass Sie %sql verwenden, weil Sie die Grafiken und Diagramme von Zeppelin benötigen - d. Sie würden nicht zu %sql tauschen, wenn Sie nicht müssen.

Sie können nur Stick mit Spark-Datenrahmen unter Verwendung von z.show() verwenden, zum Beispiel:

%pyspark 

df = sqlContext.createDataFrame([ 
            (23233, 'ipad'), 
            (23233, 'ipad'), 
            (23233, 'desktop'), 
            (23233, 'playstation'), 
            (23233, 'iphone'), 
            (23233, 'android'), 
            (23233, 'smarTv'), 
            (12345, 'ipad'), 
            (12345, 'palmPilot'), 
           ], ('id', 'device')) 

foo = df.filter('id = 23233').select('device').distinct() 
z.show(foo) 

Im obigen z.show(foo) macht die Standard-Zeppelin Tabellenansicht mit Optionen für die anderen Diagrammtypen.