Apache spark Pyspark:将多个列强制转换为数字
我正在应用一种方法,它给出了一个错误,因为转换没有很好地完成 我怎样才能1)以更有效的方式转换所有字段, 2) 仅使用withColumn一次,然后 3) 使用数字(而不是字符串)运行该方法:Apache spark Pyspark:将多个列强制转换为数字,apache-spark,pyspark,apache-spark-sql,Apache Spark,Pyspark,Apache Spark Sql,我正在应用一种方法,它给出了一个错误,因为转换没有很好地完成 我怎样才能1)以更有效的方式转换所有字段, 2) 仅使用withColumn一次,然后 3) 使用数字(而不是字符串)运行该方法: 谢谢 我不确定您想要实现什么,但下面介绍如何将所有4列转换为整数类型并调用haversine函数: df = q4.select( '*', *[F.col(c).cast('int').alias(c + '_int') for c in ['LOCLONG', 'LOCLA
谢谢 我不确定您想要实现什么,但下面介绍如何将所有4列转换为整数类型并调用
haversine
函数:
df = q4.select(
'*',
*[F.col(c).cast('int').alias(c + '_int')
for c in ['LOCLONG', 'LOCLAT', 'LOCLONG2', 'LOCLAT2']]
)
df = df.withColumn(
'distance',
haversine('LOCLONG_int', 'LOCLAT_int', 'LOCLONG2_int', 'LOCLAT2_int')
)
您将覆盖每行中的“距离”列,并将生成的数据帧分配给未使用的变量。你确定这就是你想做的吗?嗨,非常感谢!!代码看起来不错,运行也很好,但由于某些原因,当应用该方法时,它会给我以下错误:必须是实数,而不是str回溯(最近一次调用):文件“”,第11行,在haversine类型中错误:必须是实数,而不是strI。我从这里开始使用该方法:
codefrom math import radians,cos,sin,asin,sqrt def haversine(lon1,lat1,lon2,lat2):“计算地球上两点之间的大圆距离(以十进制度数表示)”#将十进制度数转换为弧度lon1,lat1,lon2,lat2=map(弧度,[lon1,lat1,lon2,lat2])#哈弗森公式dlon=lon2-lon1 dlat=lat2-lat1 a=sin(dlat/2)**2+cos(lat1)*cos(lat2)*sin(dlon/2)**2c=2*asin(sqrt(a))r=6371#地球半径(以公里为单位)。使用3956英里返回c*r
@Ana你把函数转换成UDF了吗?把@F.UDF放在行def haversine(…)
上面很好!!非常感谢!!!
df = q4.select(
'*',
*[F.col(c).cast('int').alias(c + '_int')
for c in ['LOCLONG', 'LOCLAT', 'LOCLONG2', 'LOCLAT2']]
)
df = df.withColumn(
'distance',
haversine('LOCLONG_int', 'LOCLAT_int', 'LOCLONG2_int', 'LOCLAT2_int')
)