我是新手
我有3个数据帧。 bis只是测试表,通过使用synch_date添加批准的sale_price,并将其与DEBUT和FIn进行比较
这就是我所做的,我只是scala的新手,并且在这里激发了我的所作所为,是任何能够帮助hpw提出此加入请求的人,谢谢。
val histocaisse = spark.read.option("header", true).csv("C:\\Users\\MHT\\Desktop\\histocaisse.csv")
.withColumn("pos_id",'pos_id.cast(LongType))
.withColumn("DEBUT",'DEBUT.cast(DateType))
.withColumn("FIN",'FIN.cast(DateType))
.withColumn("PRIXV",'PRIXV.cast(DoubleType))
val test = spark.read.option("header", true).csv("C:\\Users\\MHT\\Desktop\\test.csv")
test.show
val bis = spark.read.option("header", true).csv("C:\\Users\\MHT\\Desktop\\bis.csv")
.select("pos_id","synch_date","sale_price")
+------+----------+----------+----------+
|pos_id|start_date| end_date|sale_price|
+------+----------+----------+----------+
| 1|2000-01-02|2000-01-07| 2.5|
| 2|2000-02-18|2000-02-25| 2.3|
| 3|2000-03-02|2000-03-25| 14.0|
+------+----------+----------+----------+
+------+----------+
|pos_id|synch_date|
+------+----------+
| 1|2000-01-03|
| 2|2000-02-19|
| 3|2000-03-20|
+------+----------+
+------+----------+----------+
|pos_id|synch_date|sale_price|
+------+----------+----------+
| 1|2000-01-03| 2.5|
| 2|2000-02-19| 2.3|
| 3|2000-03-20| 14|
+------+----------+----------+
我们的想法是基于pos_id加入第一个和第二个,我们将测试sync_date的日期范围,以便将sale_price与start_date和end_date之间的适当间隔进行匹配。 例如,对于2000-01-03的日期,我们看到它在哪个范围内,然后我们从第一个数据帧中获取适当的sale_price 感谢您的帮助
答案 0 :(得分:0)
将dataframes
视为
df1
+------+----------+----------+----------+
|pos_id|start_date| end_date|sale_price|
+------+----------+----------+----------+
| 1|2000-01-02|2000-01-07| 2.5|
| 2|2000-02-18|2000-02-25| 2.3|
| 3|2000-03-02|2000-03-25| 14.0|
+------+----------+----------+----------+
df2
+------+----------+
|pos_id|synch_date|
+------+----------+
| 1|2000-01-03|
| 2|2000-02-19|
| 3|2000-03-20|
+------+----------+
我建议您使用join
不 pos_id
,而是建议join
使用条件匹配,如下所示
df2.join(df1, (df2("synch_date") >= df1("start_date") && (df2("synch_date") <= df1("end_date"))), "left")
.select(df2("pos_id"), $"synch_date", $"sale_price")
你应该有dataframe
作为
+------+----------+----------+
|pos_id|synch_date|sale_price|
+------+----------+----------+
|1 |2000-01-03|2.5 |
|2 |2000-02-19|2.3 |
|3 |2000-03-20|14.0 |
+------+----------+----------+
在left-join
或inner-join
或outer-join
之间选择您的dataframe
。您也可以在pos_id
流程中加入join
。
如果您想在pos_id
中添加join
,那么您可以使用以下内容
df2.join(df1, (df1("pos_id") === df2("pos_id")) && (df2("synch_date") >= df1("start_date")) && (df2("synch_date") <= df1("end_date")), "left")
.select(df2("pos_id"), $"synch_date", $"sale_price")
我希望答案很有帮助