2016-11-08 61 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