Scala-如何将字符串值传递给数据帧筛选器(Spark Shell)

Scala-如何将字符串值传递给数据帧筛选器(Spark Shell),scala,apache-spark,hadoop,hdfs,Scala,Apache Spark,Hadoop,Hdfs,我在Spark Shell环境中使用Spark 2.2.0和Scala 2.11.8。 我有一个数据帧df,我需要根据列'date'的值过滤掉前一天的数据,然后将数据附加到HDFS位置。(例如,今天是2018-06-28,我需要2018-06-27的数据) 代码如下: df.filter($"date" === "2018-06-27") .write.mode(SaveMode.Append).parquet("hdfs:/path..../date=2018-06-27") 我需要上面的

我在Spark Shell环境中使用Spark 2.2.0和Scala 2.11.8。 我有一个数据帧df,我需要根据列'date'的值过滤掉前一天的数据,然后将数据附加到HDFS位置。(例如,今天是2018-06-28,我需要2018-06-27的数据)

代码如下:

 df.filter($"date" === "2018-06-27") .write.mode(SaveMode.Append).parquet("hdfs:/path..../date=2018-06-27")
我需要上面的代码来实现自动化,所以我需要替换 “2018-06-27”用于筛选值和目录名。 所以如果我有一个字符串->date\u test:string=2018-06-27; 下面的代码应该仍然有效


如何执行此操作?

您可以应用如下筛选条件

//Input
+----------+
|      date|
+----------+
|2018-02-01|
|2017-01-02|
+----------+

//Solution: 
 val previousDate="'2018-02-01'"
 df.filter(s"date=$previousDate").show

//Output: 
+----------+
|      date|
+----------+
|2018-02-01|
+----------+
对于您的解决方案,您可以这样做

 val datetest:String="2018-02-01"
 df.filter(s"date='$datetest'").write.mode(SaveMode.Append).parquet(s"hdfs:/path..../$datetest")

可以应用如下所示的筛选条件

//Input
+----------+
|      date|
+----------+
|2018-02-01|
|2017-01-02|
+----------+

//Solution: 
 val previousDate="'2018-02-01'"
 df.filter(s"date=$previousDate").show

//Output: 
+----------+
|      date|
+----------+
|2018-02-01|
+----------+
对于您的解决方案,您可以这样做

 val datetest:String="2018-02-01"
 df.filter(s"date='$datetest'").write.mode(SaveMode.Append).parquet(s"hdfs:/path..../$datetest")

日期列date或Strings的数据类型是什么日期列的类型是stringwhy downvote?日期列date或Strings的数据类型是什么日期列的类型是stringwhy downvote?因此,出于自动化目的,它不能包含实际日期“2018-02-01”。例如,如果我有一个字符串datetest:string=2018-02-01。代码应该能够像df.filter(“date='datetest')一样工作。showI修改后的答案您需要创建过滤条件,如datetest:String=“'2018-02-01'”。这对过滤器有效,但对目录名也有效吗?不,不起作用。请参阅答案的最后一部分,它会起作用,我会试试的。所以出于自动化目的,它不能包含实际日期“2018-02-01”。例如,如果我有一个字符串datetest:string=2018-02-01。代码应该能够像df.filter(“date='datetest')一样工作。showI修改的答案您需要创建过滤条件,如datetest:String=“'2018-02-01'”。这对过滤器有效,但对目录名也有效吗?不,它不起作用。请参阅答案的最后一部分。它会很好地工作,我会试试。