【问题标题】:How to reduce/filter a Column in a Spark DataFrame (Java) based on the length of the Column?如何根据列的长度减少/过滤 Spark DataFrame (Java) 中的列?
【发布时间】:2016-11-13 18:07:53
【问题描述】:

使用带有 spark-cassandra-connector-java 和 Spark SQL DataFrame api 的 Spark 1.5.1,过滤小于或大于给定长度的字符串列的最佳方法是什么?

我正在尝试做这样的事情

DataFrame df = context.sql("select key from mytable where key is not null")
DataFrame fdf = df.filter(functions.length(df.col("key").gt(10))))

functions.length(Column) api 是如何工作的?它需要一个 Column 并返回一个 Column,但是长度会发生什么?

【问题讨论】:

    标签: java apache-spark cassandra connector


    【解决方案1】:

    1) 列是您需要应用谓词的对象。所以换个括号

    DataFrame fdf = df
     .filter(
       functions.length(df.col("key"))
       .gt(10)
    )
    

    这样做是基于列 Key 应用谓词。首先,我们将列键更改为长度(键)的列。基本上将函数应用于列中的所有值

    [ "bird", "cat", "mouse" ] -> [ 4, 3, 5 ]
    

    既然我们现在有一个数字列,我们将大于谓词应用于该列

    [ 4 > 10, 3 > 10, 5 > 10 ] -> [ False, False, False ]
    

    布尔值用于判断谓词是否通过。

    2) 为什么不直接在 sql 中检查

    sqlContext.sql("SELECT * FROM test.common WHERE LENGTH(key) > 10")
    

    获取key长度大于10的所有值

    【讨论】:

    • 谢谢。这很有帮助。我曾在此 [链接]{docs.datastax.com/en/datastax_enterprise/4.8/…} 中参考了 DataStax 文档,但没有看到此处列出的 LENGTH 关键字/函数。两种选择都有效,但我已经简化了这篇文章的示例,所以我需要使用的是带有过滤器功能的示例。
    猜你喜欢
    • 2016-02-15
    • 2021-01-09
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    • 2021-01-14
    • 1970-01-01
    • 2020-08-22
    • 1970-01-01
    相关资源
    最近更新 更多