Scala - 使用 "endsWith"过滤数据帧

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

给定一个 DataFrame :

 val df = sc.parallelize(List(("Mike","1986","1976"), ("Andre","1980","1966"), ("Pedro","1989","2000")))
      .toDF("info", "year1", "year2")
df.show

 +-----+-----+-----+
 | info|year1|year2|
 +-----+-----+-----+
 | Mike| 1986| 1976|
 |Andre| 1980| 1966|
 |Pedro| 1989| 2000|
 +-----+-----+-----+

我尝试过滤所有以 df 结尾的 6 值,但得到异常。
我试过了 :
  val filtered = df.filter(df.col("*").endsWith("6"))
  org.apache.spark.sql.catalyst.analysis.UnresolvedException: Invalid call to dataType on unresolved object, tree: ResolvedStar(info#20, year1#21, year2#22)

我也试过这个:
val filtered = df.select(df.col("*")).filter(_ endsWith("6"))
error: missing parameter type for expanded function ((x$1) => x$1.endsWith("6"))

如何解决?谢谢

最佳答案

我不太确定您要做什么,但据我了解:

val df = sc.parallelize(List(("Mike","1986","1976"), ("Andre","1980","1966"), ("Pedro","1989","2000"))).toDF("info", "year1", "year2")
df.show 
# +-----+-----+-----+
# | info|year1|year2|
# +-----+-----+-----+
# | Mike| 1986| 1976|
# |Andre| 1980| 1966|
# |Pedro| 1989| 2000|
# +-----+-----+-----+

val conditions = df.columns.map(df(_).endsWith("6")).reduce(_ or _)
df.withColumn("condition", conditions).filter($"condition" === true).drop("condition").show
# +-----+-----+-----+
# | info|year1|year2|
# +-----+-----+-----+
# |Andre| 1980| 1966|
# | Mike| 1986| 1976|
# +-----+-----+-----+

关于Scala - 使用 "endsWith"过滤数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41803989/

相关文章:

python - 使用 pyspark : [java. lang.IllegalArgumentException 从 S3 服务器读取时出错]

java - 如何在java Spark中组合两个具有不同键的RDD?

python - 根据列表中的值向 DataFrame 添加新列

mysql - 无法使用 mysql 结果解析符号 scala play2

scala - SBT 解析器在 build.sbt 中工作,在 Build.scala 中不起作用

scala - "unresolved dependency"用于 SBT 上的 Spark 2.0.1

r - 将多条垂直线添加到 ggplot2 箱线图中

scala - 手动创建类型标签

scala - 将嵌套空值转换为数据帧 Spark 内的空字符串

r - R中的分组计算