2016-11-08 10 views
4

私はハイブテーブルから列のリストを取得し、その結果をスパークデータフレームに格納しようとしています。スパークデータフレーム/ハイブ結果セットをソート

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 COLUMNSの」が、私は「DESC」を使用し、「COL_NAME」で列リストを取得しました。

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

ないソートやORDERBYメソッドを使用しているかどうかはわかりのサンプルを追加しました

は、以下のことを試してみてください、

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

質問にコードスニペットを追加しました。 show columnsの部分を実行すると、警告が表示されます(コードに表示されています)。これが例外の可能性のある理由ですか? – Amber