使用变量过滤Spark Dataframe

时间:2017-04-23 14:09:09

标签: scala apache-spark dataframe

这在火花数据帧(1.6 / 2.1)

中是否可行
val data="some variable"

df.filter("column1"> data)

我可以使用静态值执行此操作,但无法弄清楚如何通过变量进行过滤。

8 个答案:

答案 0 :(得分:4)

import org.apache.spark.sql.functions._

val data="some variable"
df.filter(col("column1") > lit(data))

答案 1 :(得分:2)

我不确定你是如何用文字完成的,因为你所拥有的并不匹配任何filter方法签名。

所以是的,你可以使用非文字,但试试这个:

import sparkSession.implicits._
df.filter($"column1" > data)

请注意$implicit使用String转换将Column转换为StringColumn命名的>。同时,此AnyColumn方法,该方法需要Any并返回新的dataISerialPort将是ICamera值。

答案 2 :(得分:1)

在Java中,我们可以这样做:

  int i  =10;

 //for equal condition
  df.select("column1","column2").filter(functions.col("column1").equalTo(i)).show();

 //for greater than or less than
 df.select("no","name").filter(functions.col("no").gt(i)).show();
 df.select("no","name").filter(functions.col("no").lt(i)).show();

答案 3 :(得分:1)

是的,您可以使用变量来过滤Spark Dataframe。

val keyword = "my_key_word"
var keyword = "my_key_word" // if it is a variable

df.filter($"column1".contains(keyword))
df.filter(lower($"column1").contains(keyword)) //if not case sensitive

答案 4 :(得分:1)

这里是在数字列上使用< > =的过滤器的完整演示,其中mysearchid是下面声明为val的数字...

scala>val numRows =10
scala>val ds = spark.range(0, numRows)
ds: org.apache.spark.sql.Dataset[Long] = [id: bigint]

scala>val df = ds.toDF("index")
df: org.apache.spark.sql.DataFrame = [index: bigint]

scala>df.show
+-----+
|index|
+-----+
|    0|
|    1|
|    2|
|    3|
|    4|
|    5|
|    6|
|    7|
|    8|
|    9|
+-----+


scala>val mysearchid=9
mysearchid: Int = 9

scala>println("filter with less than ")
filter with less than

scala>df.filter(df("index") < mysearchid).show
+-----+
|index|
+-----+
|    0|
|    1|
|    2|
|    3|
|    4|
|    5|
|    6|
|    7|
|    8|
+-----+


scala> println("filter with greater than ")
filter with greater than

scala> df.filter(df("index") > mysearchid).show
+-----+
|index|
+-----+
+-----+


scala> println("filter with equals ")
filter with equals

scala> df.filter(df("index") ===  mysearchid).show
+-----+
|index|
+-----+
|    9|
+-----+

答案 5 :(得分:0)

您只需使用string interpolation

val data="some variable"
df.filter(s"column1 > $data")

答案 6 :(得分:0)

import org.apache.spark.sql.functions._

val portfolio_name = "Product"

spark.sql("""SELECT
   *
FROM
    Test""").filter($"portfolio_name"===s"$portfolio_name").show(100)

答案 7 :(得分:0)

extension MKAnnotationView {

    public func set(image: UIImage, with color : UIColor) {
        let view = UIImageView(image: image.withRenderingMode(.alwaysTemplate))
        view.tintColor = color
        UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.isOpaque, 0.0)
        guard let graphicsContext = UIGraphicsGetCurrentContext() else { return }
        view.layer.render(in: graphicsContext)
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        self.image = image
    }
    
}

如果您想将变量与整个列进行比较,它将起作用