4000-520-616
欢迎来到免疫在线!(蚂蚁淘生物旗下平台)  请登录 |  免费注册 |  询价篮
主营:原厂直采,平行进口,授权代理(蚂蚁淘为您服务)
咨询热线电话
4000-520-616
当前位置: 首页 > 新闻动态 >
新闻详情
使用SparkR计算地理距离 -Java 学习之路
来自 : www.javaroad.cn/questions/151. 发布时间:2021-03-25

您不能直接在Spark DataFrames 上使用标准R功能 . 如果你使用最近的Spark版本,你可以使用 dapply ,但它有点冗长和缓慢:

df - createDataFrame(data.frame( lat1=c(23.123), lng1=c(24.234), lat2=c(25.345), lng2=c(26.456)))new_schema - do.call( structType, c(schema(df)$fields(), list(structField( dist , double , TRUE))))attach_dist - function(df) { df$dist - geosphere::distCosine( cbind(df$lng1, df$lat1), cbind(df$lng2, df$lat2))dapply(df, attach_dist, new_schema) % % head()
lat1 lng1 lat2 lng2 dist1 23.123 24.234 25.345 26.456 334733.4

在实践中,我宁愿直接使用公式 . 它会快得多,所有必需的功能都已经可用,而且不是很复杂:

df % % withColumn( dist , acos( sin(toRadians(df$lat1)) * sin(toRadians(df$lat2)) +  cos(toRadians(df$lat1)) * cos(toRadians(df$lat2)) *  cos(toRadians(df$lng1) - toRadians(df$lng2))) * 6378137) % % head()
lat1 lng1 lat2 lng2 dist1 23.123 24.234 25.345 26.456 334733.4

{ df$dist <- geosphere::distCosine( cbind(df$lng1, df$lat1), cbind(df$lng2, df$lat2)) df } dapply(df, attach_dist, new_schema) %>% ...我在R中有一个Spark数据帧,如下所示 head(df) Lat1 Lng1 Lat2 Lng2 23.123 24.234 25.345 26.456 ... ... ... ......使用SparkR计算地理距离

本文链接: http://dfdist.immuno-online.com/view-762440.html

发布于 : 2021-03-25 阅读(0)