【发布时间】:2020-11-01 16:29:54
【问题描述】:
我是 spark 的初学者,我被困在如何使用数据框发出 sql 请求。
我有以下两个数据框。
df_zones
+-----------------+-----------------+----------------------+---------------------+
|id |geomType |geom |rayon |
+-----------------+-----------------+----------------------+---------------------+
|30 |Polygon |[00 00 00 00 01 0...] |200 |
|32 |Point |[00 00 00 00 01 0.. ] |320179 |
+-----------------+-----------------+----------------------+---------------------+
df_tracking
+-----------------+-----------------+----------------------+
|idZones |Longitude |Latitude |
+-----------------+-----------------+----------------------+
|[30,50,100,] | -7.6198783 |33.5942549 |
|[20,140,39,] |-7.6198783 |33.5942549 |
+-----------------+-----------------+----------------------+
我要执行以下请求。
"SELECT zones.* FROM zones WHERE zones.id IN ("
+ idZones
+ ") AND ((zones.geomType='Polygon' AND (ST_WITHIN(ST_GeomFromText(CONCAT('POINT(',"
+ longitude
+ ",' ',"
+ latitude
+ ",')'),4326),zones.geom))) OR ( (zones.geomType='LineString' OR zones.geomType='Point') AND ST_Intersects(ST_buffer(zones.geom,(zones.rayon/100000)),ST_GeomFromText(CONCAT('POINT(',"
+ longitude
+ ",' ',"
+ latitude
+ ",')'),4326)))) "
我真的卡住了,我应该加入两个数据框还是什么? 我尝试像这样使用 id 和 idZone 加入两个数据框:
df_tracking.select(explode(col("idZones").as ("idZones"))).join(df_zones,col("idZones").equalTo(df_zones.col("id")));
但在我看来,加入并不是正确的选择。
我需要你的帮助。
谢谢
【问题讨论】:
-
你重命名了错误的列,把
explode(col("idZones").as("idZones"))改成explode(col("idZones")).as("idZones")
标签: java sql dataframe apache-spark