2017-03-16 11 views
-1

Spark DataFrameで 'SQL'クエリを実行しようとしています。私はテーブルとしてdfの名前を登録しましたが、今はudfを適用したカラムでselectを実行してから、特定の条件を満たす行をピックアップしようとしています。Spark SQL "select column AS ..."カラムが見つかりません

問題は、私のWHERE節で修正された列を参照していますが、ASで宣言された名前を見ることができないということです。

DataFrame df = sqlContext.read() 
      .format("com.databricks.spark.csv") 
      .option("header", "true") 
      .option("delimiter", delimiter) 
      .load(path); 
    df.registerTempTable("df"); 

    String sqlDfQuery = "SELECT parseDateTime(start) as start1 FROM df WHERE start1 > 1"; 
    if (sqlContext.sql(sqlDfQuery).take(1) != null) return true; 

私は戻って

org.apache.spark.sql.AnalysisExceptionを取得していますことを実行しています:[スコア、開始、...

: 'START1' 与えられた入力列を解決することはできません

parseDateTimeその

sqlContext.udf().register("parseDateTime", (String dt) -> new DateTime(dt).getMillis(), DataTypes.LongType); 

Shのように定義されたUDFであります私はそれをやろうとしていませんか?

答えて

0

エイリアスの前にフィルタが適用されるためです。

この問題を解決するには、ネストされたselect文を使用できます。 次のようなもの:

String sqlDfQuery = "SELECT start1 FROM (
           SELECT parseDateTime(start) AS start1 FROM df) TMP 
        WHERE start1 > 1 "; 
関連する問題