Scala Spark - 映射函数引用另一个数据帧

时间:2016-07-07 19:03:32

标签: scala apache-spark dataframe apache-spark-sql

我有两个数据帧:

DF1:

+---+------+----+
| id|weight|time|
+---+------+----+
|  A|   0.1|   1|
|  A|   0.2|   2|
|  A|   0.3|   4|
|  A|   0.4|   5|
|  B|   0.5|   1|
|  B|   0.7|   3|
|  B|   0.8|   6|
|  B|   0.9|   7|
|  B|   1.0|   8|
+---+------+----+

df2:

+---+---+-------+-----+
| id|  t|t_start|t_end|
+---+---+-------+-----+
|  A| t1|      0|    3|
|  A| t2|      4|    6|
|  A| t3|      7|    9|
|  B| t1|      0|    2|
|  B| t2|      3|    6|
|  B| t3|      7|    9|
+---+---+-------+-----+

我想要的输出是识别''对于df1中的每个时间戳,其范围为' t'在df2。

df_output:

+---+------+----+---+
| id|weight|time| t |
+---+------+----+---+
|  A|   0.1|   1| t1|
|  A|   0.2|   2| t1|
|  A|   0.3|   4| t2|
|  A|   0.4|   5| t2|
|  B|   0.5|   1| t1|
|  B|   0.7|   3| t2|
|  B|   0.8|   6| t2|
|  B|   0.9|   7| t3|
|  B|   1.0|   8| t3|
+---+------+----+---+

到目前为止,我的理解是我必须通过引用'id df2创建一个udf,它将列'timemap作为输入,每行df2.filter(df2.id == df1.id, df1.time >= df2.t_start, df1.time <= df2.t_end), and get the corresponding .t`

我对Scala和Spark很新,所以我想知道这个解决方案是否可行?

1 个答案:

答案 0 :(得分:1)

您无法使用UDF,但您只需重复使用已定义的过滤条件来加入两个框架:

findall(P, member(slope(N, P), SlopeList), CommonPoints).