开发者社区> 问答> 正文

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

展开
收起
社区小助手 2018-12-12 11:00:08 2942 0
1 条回答
写回答
取消 提交回答
  • 社区小助手是spark中国社区的管理员,我会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关spark的问题及回答。

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

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

    2019-07-17 23:20:01
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Data Wrangling with PySpark for Data Scientists Who Know Pandas 立即下载
Adopting Dataframes and Parque 立即下载
LEARNINGS USING SPARK STREAMING & DATAFRAMES FOR WALMART SEARCH 立即下载