データフレームに日付値(yyyy / mm / dd)があります。次の7日間のデータを見つける必要があります。Sparkでデータフレームを使用してそれを行うにはどうすればよいですか?
例:以下のようなデータがあります
23/01/2018 , 23
24/01/2018 , 21
25/01/2018, 44
.
.
.
.
.
29/01/2018,17
今日を含む次の7日間のデータを取得する必要があります(データの最小日付から開始)。したがって、私の例では、2018/01/23プラス7日前の日付を取得する必要があります。同じことを達成する方法はありますか?
注:データから最小日付を見つける必要があり、その最小日付+ 7日間のデータをフィルタリングする必要があります
scala> df.show
+----------+---+-------+
| data_date|vol|channel|
+----------+---+-------+
|05/01/2019| 10| ABC|
|05/01/2019| 20| CNN|
|06/01/2019| 10| BBC|
|07/01/2019| 10| ABC|
|02/01/2019| 20| CNN|
|17/01/2019| 10| BBC|
+----------+---+-------+
scala> val df2 = df.select("*").filter( to_date(replaceUDF('data_date)) > date_add(to_date(replaceUDF(lit(minDate))),7))
df2: org.apache.spark.sql.Dataset[org.apache.spark.sql.Row] = [data_date: string, vol: int ... 1 more field]
scala> df2.show
+---------+---+-------+
|data_date|vol|channel|
+---------+---+-------+
+---------+---+-------+
以下のデータが必要です。最小日付は2018年2月2日aなので、最小日付+7は2018年7月2日です。2018年2月1日から2018年7月2日までのデータが必要です
+----------+---+-------+
| data_date|vol|channel|
+----------+---+-------+
|05/01/2019| 10| ABC|
|05/01/2019| 20| CNN|
|06/01/2019| 10| BBC|
|07/01/2019| 10| ABC|
|02/01/2019| 20| CNN|
+----------+---+-------+
私は火花の初心者なので誰かが助けることができます
以下のステートメントをインポート
import org.apache.spark.sql.functions._
コードスニペット
val minDate = df.agg(min($"date1")).collect()(0).get(0)
val df2 = df.select("*").filter( to_date(regexp_replace('date1,"/","-")) > date_add(to_date(regexp_replace(lit(minDate)),"/","-"),7))
df2.show()
データの場合
val data = Seq(("2018/01/23",23),("2018/01/24",24),("2018/02/20",25))
出力は次のようになります
+----------+---+
| date1|day|
+----------+---+
|2018/02/20| 25|
+----------+---+
別の出力を探している場合は、期待される結果で質問を更新してください。
以下はあなたの参照のための完全なプログラムです
package com.nelamalli.spark.dataframe
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions._
object DataFrameUDF {
def main(args:Array[String]): Unit = {
val spark:SparkSession = SparkSession.builder()
.master("local[3]")
.appName("SparkByExample")
.getOrCreate()
val data = Seq(("2018/01/23",23),("2018/01/24",24),("2018/02/20",25))
import spark.sqlContext.implicits._
val df = data.toDF("date1","day")
val minDate = df.agg(min($"date1")).collect()(0).get(0)
val df2 = df.select("*").filter( to_date(regexp_replace('date1,"/","-")) > date_add(to_date(regexp_replace(lit(minDate)),"/","-"),7))
df2.show()
}
}
ありがとう
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加