2017-03-26 7 views
3

ハイブテーブルを照会して、ユニークな列の最後の値、たとえばidを検索しています。私は今、私は私が期待した結果を取得していますpysparkを使用してハイブテーブルの最終値を調べる

frame1=frame.map(lambda row: [str(c) for c in row]).collect() 

lastval =''.join(frame1[0][0]) 

print lastval 

276308 

をしています。このためlastvalとしてこれを取得したいframe.show()

+------+ 
| _c0| 
+------+ 
|276308| 
+------+ 

を行うと、私は

以下のような
frame=sqlContext.sql("select max(id) from database.table") 

をしています私はこれを行うより良い方法があるのだろうかと思っていますか?

+0

あなたはフレーム列を文字列化しているのはなぜ? – karthikr

答えて

1

IIUYC。

のは、いくつかのデータを準備してみましょう:

pdf = pd.DataFrame({"id":[1,2,3]}) 
df = sqlContext.createDataFrame(pdf) 
df.registerTempTable("tbl") 
sqlContext.sql("select * from tbl").show() 
+---+ 
| id| 
+---+ 
| 1| 
| 2| 
| 3| 
+---+ 

を選択し、 "そのまま":

sqlContext.sql("select max(id) from tbl").show() 
+-------+ 
|max(id)| 
+-------+ 
|  3| 
+-------+ 

ハイブテーブルから "かわいい" を選択します。

sqlContext.sql("select max(id) as lastVal from tbl").show() 
+-------+ 
|lastVal| 
+-------+ 
|  3| 
+-------+ 

は、Sparkから "かわいい" を選択df

from pyspark.sql import functions as F 
df.select(F.max("id").alias("lastVal")).show() 
+-------+ 
|lastVal| 
+-------+ 
|  3| 
+-------+ 

あなたは次のように進むことができ、さらに使用または分析のための純粋なPythonのにデータを渡すことを希望する必要があります。

lv = sqlContext.sql("select max(id) as lastVal from tbl").collect() 
print(lv[0]["lastVal"]) 
3 

lv = df.select(F.max("id").alias("lastVal")).collect() 
print(lv[0]["lastVal"]) 
3 
関連する問題