当前位置: 首页 > 知识库问答 >
问题:

用Spark DataFrame进行地理滤波

苗阳
2023-03-14
 LogsDataFrame.printSchema :
 root
 |-- lat: double (nullable = false)
 |-- lon: double (nullable = false)
 |-- imp: string (nullable = false)
 |-- log_date: string (nullable = true)
 |-- pubuid: string (nullable = true)
within(lat : Double, long : Double, radius : Double) : Boolean

共有1个答案

鱼阳伯
2023-03-14

一般来说,你至少需要两件事才能使它工作。首先,您必须创建一个UDF包装:

import org.apache.spark.sql.functions.{udf, lit}

val withinUDF = udf(within _)

接下来,当调用UDF时,应该将radius标记为文字:

df.where(withinUDF($"lat", $"long", lit(RADIUS)))

由于不是每个类型都可以通过这种方式传递,并且创建包装器和调用lit相当乏味,您可能更喜欢curring:

def within(radius: Double) = udf((lat: Double, long: Double) => ???)

df.where(within(RADIUS)($"lat", $"long"))
 类似资料:
  • 利用通配符进行复杂的数据操作。 LIKE 与 REGEXP 操作符 当需要搜索产品文本中包含某个特定关键字的所有产品,使用通配符来创建比较特定的数据搜索模式。 通配符(wildcard) 用来匹配值的一部分特殊字符。 搜索模式(search pattern) 由字母值,通配符两租组合构成的搜索条件。 通配符是SQL的WHERE子句中的特殊含义字符,子句中使用通配符必须使用LIKE操作符。 百分号%

  • 首先,请让我知道我正在做的是不是对dplyr的不当使用,因为我不确定我是否以最佳方式实现了这一点。我有以下数据帧: 我想做的过滤有点罗嗦,但我会尝试-我想通过删除col1 == '0 '的所有行来过滤数据帧,如果该行出现在该用户的第一行之后,其中col1 == '1 '。(粗体表示我把原问题搞砸了,把0和1调换了)。 例如,对于用户7,第3行的col1 == '1 ',所以我想过滤第3行之后col

  • 问题内容: 我有一个MS SQL查询,该查询通过从远程服务器提取数据。我要提取的数据需要按在运行时确定的日期进行过滤。当我像这样运行查询时: 然后可以远程应用该过滤器…但是,我实际上不希望使用“ 1/1/2009”作为日期-我希望该日期由用户定义的函数提供,例如: 该函数是返回日期时间的自定义CLR标量值函数…( 您可能会问为什么我需要这样做…细节有些复杂,所以请相信我-我必须这样做方式。 ) 当

  • 因此,我的文档(帖子)中有一个位置字段。此位置字段是一个地理形状。它可以是一个点或多边形。有时,我可能不得不使用地理距离过滤器来获取标记最接近某个坐标的帖子(仅具有键入地理形状,而不是多边形)。然而,在尝试使用geo_距离过滤器时,我遇到了以下错误。 是否有一种方法可以在类型的地理图形上使用地理距离过滤器?

  • 我在努力让这东西工作。我有一个XML文件,我需要使用XPath过滤元素“标题”。之后,我需要将C元素下的所有内容复制到外部文件,但这不是现在的重点。我需要让这个运行使用xml.etree.cElementTree或xml.etree.ElementTree。我已经在stackoverflow和其他网站上读了一大堆帖子,然后卡住了。秀...首先是XML结构: 我甚至不能通过XPath找到Cid元素。

  • 如何在react-google-maps中更改defaultCenter?我需要找到我的地理定位并更改缺省值lat和LNG。 接下来,我需要将数据传输到组件MapWithAMarker:ecenter={myLocation}和Marker position={myLocation}