使用变量过滤Spark Dataframe

8
在Spark DataFrame中(1.6 / 2.1),这种操作是否可能?
val data="some variable"

df.filter("column1"> data)

我可以使用静态值来完成这个操作,但是无法想出如何通过变量进行过滤。


你能提供一个 val data 的例子吗? - himanshuIIITian
8个回答

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

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

3
我不确定你是如何使用文字字面量完成这个操作的,因为你所写的代码并不符合任何一个“filter”方法的签名。
所以,是的,你可以使用非文字字面量来工作,但请尝试以下代码:
import sparkSession.implicits._
df.filter($"column1" > data)

请注意$,它使用隐式转换将String转换为以该String命名的Column。同时,该Column具有>方法,接受一个Any并返回一个新的Column。那个Any将是你的data值。

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

val portfolio_name = "Product"

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

1
你可以使用字符串插值轻松实现它。
val data="some variable"
df.filter(s"column1 > $data")

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

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();

0
这是一个完整的筛选器演示,使用<>=对数字列进行操作。其中mysearchid是一个在下面声明为val的数字。请保留HTML标签。
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|
+-----+

0
val x = "2020-05-01"
df.filter($"column_name"===x).show()

如果你想将一个变量与整个列进行比较,这个方法是可行的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接