Spark SQL"选择列AS ..."没找到专栏

时间:2017-03-16 15:39:17

标签: apache-spark apache-spark-sql spark-dataframe

我正在尝试运行一个' SQL'查询Spark DataFrame。我已经将df的名称注册为表,现在我正在尝试在我应用udf的列上运行select,然后拾取通过某个条件的行。

问题是我的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是一个像那样定义的UDF

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

我不应该这样做吗?

1 个答案:

答案 0 :(得分:0)

这是因为它在别名之前应用过滤器。

您可以执行嵌套的select语句来解决此问题。 如下所示:

String sqlDfQuery = "SELECT start1 FROM (
                              SELECT parseDateTime(start) AS start1 FROM df) TMP
                     WHERE start1 > 1 ";