我有一个数据帧,我想根据函数返回的值添加一个新列。此函数的参数是来自同一数据帧的四列。
这是我的数据框(这四个列有更多列)
lat1 | lng1 | lat2 | lng2 |
-32.92 | 151.80 | -32.89 | 151.71 |
| -32.92 | 151.80 | -32.89 | 151.71 |
| -32.92 | 151.80 | -32.89 | 151.71 |
| -32.92 | 151.80 | -32.89 | 151.71 |
| -32.92 | 151.80 | -32.89 | 151.71 |
我想添加另一列“距离”,它是两个位置点(纬度/经度)之间的总距离。我有一个函数,它将四个位置点作为参数,并将差异作为Float返回。
def get_distance(lat_1, lng_1, lat_2, lng_2):
d_lat = lat_2 - lat_1
d_lng = lng_2 - lng_1
temp = (
math.sin(d_lat / 2) ** 2
+ math.cos(lat_1)
* math.cos(lat_2)
* math.sin(d_lng / 2) ** 2
)
return 6367.0 (2 math.asin(math.sqrt(temp)))
这是错误,我也不确定这种方法,它基于我已经提到的其他问题。
关于unicode的stacktrace部分表明列的类型是StringType,因为你不能减去两个字符串。你可以查看使用df.printSchema()。
如果float(lat1)在计算之前将所有的拉特和长整数转换为浮点数(例如),则udf应该可以正常执行。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。