2017-01-02 49 views
0

下面是我的腳本在數據幀使用SQL與Python:註冊臨時表不工作

pyspark --packages com.databricks:spark-csv_2.10:1.4.0 
from pyspark.sql import SQLContext 
sqlContext = SQLContext(sc) 
df = sqlContext.read.format('com.databricks.spark.csv').options(header='true', inferschema='true').load('file:///root/Downloads/data/flight201601short.csv') 

df.show(5) 結果顯示的如下:

enter image description here

然後我將數據幀註冊到臨時表中:

df.registerTempTable("flight201601") 

想跑一些SQL查詢象下面這樣:

sqlContext.sql("select distinct CARRIER from flight201601") 

它不會產生預期的結果,而不是:

enter image description here

我也試過:

sqlContext.sql("select * from flight201601") 

,它給我:

enter image description here

所以它似乎registerTempTable方法只創建表架構和表不填充,我錯過了什麼?

回答

2

您必須在sqlContext.sql返回的Dataframe上調用show()方法才能獲得查詢結果。檢查點火的document

SQLContext上的sql函數使應用程序能夠以編程方式運行SQL查詢並將結果作爲DataFrame返回。

sqlDF = sqlContext.sql("select * from flight201601") 
sqlDF.show() 
0

@PasLeChoix

當你執行下面的語句 sqlContext.sql

( 「SELECT * FROM flight201601」)

星火將返回數據幀。因此,您需要將結果存儲到DataFrame中,並使用show()命令將結果顯示在控制檯上,如@abaghel所述。

默認情況下,無論何時Spark返回DataFrmae,它只會顯示控制檯上的架構,正如您在案例中獲得的那樣。