PySpark DataFrame列转列表报'Column' object is not callable如何解决
报错原因
你当前使用的datadf是PySpark SQL DataFrame,并非pandas DataFrame,二者API并不通用:直接通过datadf['Lat']取到的是PySpark的Column对象,没有tolist()、values等pandas Series的属性和方法,因此触发报错。
解决方法
有两种常用的实现方案:
方案1:先转pandas DataFrame再提取列表(写法更简洁,适合中小数据量)
# 先把PySpark DataFrame转成pandas DataFrame pandas_df = datadf.toPandas() # 分别提取经纬度列表 latlist = pandas_df['Lat'].tolist() lonlist = pandas_df['Lon'].tolist()
方案2:通过RDD操作直接提取(适合不需要全量转pandas的场景)
latlist = datadf.select("Lat").rdd.flatMap(lambda x: x).collect() lonlist = datadf.select("Lon").rdd.flatMap(lambda x: x).collect()
注意事项
两种方案都会把全量坐标数据拉取到当前Driver节点的内存中,如果你的DataFrame数据量极大,建议先做过滤、采样,确认只保留需要的点位数据后再执行转换操作,避免Driver内存溢出。
转换完成得到的经纬度列表即可直接用于在荷兰底图上添加点位。
内容的提问来源于stack exchange,提问作者user17515752
相关产品推荐
相关产品推荐

