【问题标题】:Spark Scala Dataframes: Filter records which returns false for a functionSpark Scala Dataframes:过滤为函数返回 false 的记录
【发布时间】:2019-01-14 04:28:20
【问题描述】:
dataFrame.select(columnName).filter(myFunction(_));

我只需要过滤掉那些为“myFunction”返回 true 的记录; myFunction 接受每条记录的列值,并对值进行一些分析并返回 true 或 false。

我想要实现的是过滤掉不能转换为数字数据的值(比如双精度)。我有一列主要包含数字数据和一些字符串数据。我想过滤掉那些不能转换为 double 的值。

【问题讨论】:

  • 您正在使用的代码到底有什么问题?你的实际问题是什么?
  • 你需要映射你的函数。过滤器只会获取 myFunction 返回的条件为真的记录

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


【解决方案1】:

如果您过滤掉无法转换为数字数据的值,则转换并删除 NULL:

val df = sc.parallelize((1L, "0.213") :: (2L, "foo") :: (3L, "4.0") :: Nil)
  .toDF("k", "v")

df.withColumn("v", $"v".cast("double")).na.drop(Seq("v"))

如果您想使用自定义函数,您必须将数据转换为 RDD:

df.rdd.filter(r => ???)

使用UDF:

df.where(udf(myFunction _)(columnName))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多