云栖问答

找不到答案?去提问题

函数 spark DataFrame 2018-12-12 11:00:08

PySpark Dataframe根据函数返回值创建新列

我有一个数据帧,我想根据函数返回的值添加一个新列。此函数的参数是来自同一数据帧的四列。

这是我的数据框(这四个列有更多列)

  • 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)))
这是错误,我也不确定这种方法,它基于我已经提到的其他问题。

1个回答

0

社区小助手

关于unicode的stacktrace部分表明列的类型是StringType,因为你不能减去两个字符串。你可以查看使用df.printSchema()。

如果float(lat1)在计算之前将所有的拉特和长整数转换为浮点数(例如),则udf应该可以正常执行。

1
GO