【问题标题】:How to pass String variable as a condition into DataFrame Filter?如何将字符串变量作为条件传递给 DataFrame 过滤器?
【发布时间】:2019-08-01 07:50:16
【问题描述】:

我想根据以下条件过滤掉来自DataFramedf的数据。由于要求很少,我需要使用配置文件(或作为字符串变量)传递此条件。

DataFrame df

+----+------+----+-----+
|  Id|  Name|City|State|
+----+------+----+-----+
|   1|   ABC| ADI|  GUJ|
|   2|   BCD|null|  MAH|
|   3|  null| ADI|  GUJ|
|   4|  AFDS| DEL|  DEL|
|null|  null| PUN| null|
|   6|   DSF| MUM|  MAH|
|   7|DSFDFS|null|  RAJ|
|   8|  null| PUN|  MAH|
|   9|   FDA| JAI|  RAJ|
|  10|  DFAD|null|  GUJ|
|  11|  null|null| null|
|  12|  null|null| null|
+----+------+----+-----+

条件:

col("State").isNull && (col("City").isNull || col("Name").isNull)

我已检查filter 接受字符串条件,但在上述条件下它不适用于isNull

请帮忙。

【问题讨论】:

    标签: dataframe apache-spark filter


    【解决方案1】:

    你必须在过滤器中使用 SQL:

    filter("State IS NULL AND (City IS NULL OR Name IS NULL)")
    

    【讨论】:

      【解决方案2】:

      这会有帮助吗:

      val queryToExeFromConf = "SELECT * FROM MyTempView WHERE State IS NULL AND (City IS NULL OR Name IS NULL)"
      df.createOrReplaceTempView("MyTempView")
      val filteredDF = df.sparkSession.sql(queryToExeFromConf)
      
      

      【讨论】:

        【解决方案3】:

        我假设您要过滤掉“州”和“城市/名称”为空的记录。尝试以下解决方案 -

        df.filter(!col("State").isNull && !col("City").isNull.or(col("Name").isNull))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-07-13
          • 1970-01-01
          • 2022-11-20
          • 2020-06-16
          • 2015-10-27
          • 1970-01-01
          • 2019-01-21
          • 2021-03-23
          相关资源
          最近更新 更多