2016-11-08 59 views
4

我試圖從Hive表中檢索列的列表並將結果存儲在spark數據框中。對Spark數據框/ Hive結果集進行排序

var my_column_list = hiveContext.sql(s""" SHOW COLUMNS IN $my_hive_table""") 

但我無法按字母順序排序數據幀甚至顯示列查詢的結果。我嘗試使用sort和orderBy()。

如何按字母順序排列結果?

更新:加入我的代碼示例

import org.apache.spark.{ SparkConf, SparkContext } 
import org.apache.spark.sql.DataFrame 
import org.apache.spark.sql.hive.HiveContext 

val hiveContext = new HiveContext(sc) 
hiveContext.sql("USE my_test_db") 

var lv_column_list = hiveContext.sql(s""" SHOW COLUMNS IN MYTABLE""") 
//WARN LazyStruct: Extra bytes detected at the end of the row! Ignoring similar problems 

lv_column_list.show //Works fine 
lv_column_list.orderBy("result").show //Error arises 

回答

0

而不是「SHOW列」,我用「DESC」和檢索與「COL_NAME」列的列表。

var lv_column_list = hiveContext.sql(s""" DESC MYTABLE""") 
lv_column_list.select("col_name").orderBy("col_name") 
0

不知道你是如何使用排序或排序依據的方法,

嘗試以下,

df.sort(asc("column_name"))  
df.orderBy(asc("column_name")) 
+1

這裏排序不是問題,它與'show columns'命令的結果有關。 – cheseaux

3

SHOW COLUMNS查詢會生成一個名爲result的列的Dataframe。如果你爲了通過這個專欄中,你得到你想要的東西:

val df = hiveContext.sql(s""" SHOW COLUMNS IN $my_hive_table """) 
df.orderBy("result").show 
+0

我得到一個異常「org.apache.spark.sql.AnalysisException:已解析的屬性結果#31從運算符中的結果#21中丟失!Sort [result#31 ASC],true;」 – Amber

+0

我可以看看你使用的那段代碼嗎? – cheseaux

+0

在問題中添加了代碼片段。當我執行顯示列部分時,我收到警告(顯示在代碼中)。這可能是例外的可能原因嗎? – Amber