我正在尝试使用apache-flink使用pyproj库将纬度和经度转换为WGS4坐标。我想使用矢量化UDF。但每当我将数据传递给VDUF时。它抛出错误。
序列的真值不明确。使用a.empty、a.bool((、a.item((,a.any((或a.all((
@udf(input_types=[DataTypes.DOUBLE()], result_type=DataTypes.FLOAT(), udf_type="pandas")
def transform_to_wgs_lat(lat, lng, epsg):
new_lat, new_lng = Transformer.from_crs(epsg, 4326).transform(lat, lng)
return new_lat
示例数据:
lat = pd.Series([32.620359, 32.23561])
lng = pd.Series([-104.126000001, -104.20343])
proj = pd.Series([4269, 4269])
这是我的函数,(lat,lng,epsg(都是级数。在VDUF中,输入必须是串行,输出也必须是串行。所以我需要一系列新的纬度。但是我得到了上面的错误
这只是一条简单的出路。
@udf(result_type=DataTypes.DOUBLE(), func_type="pandas")
def transform_to_wgs_lat(lat, lng, epsg):
lat = lat.fillna(value=0.0)
lng = lng.fillna(value=0.0)
epsg = epsg.fillna(value=0.0)
final_result = []
for each_lat, each_lng, each_epsg in zip(lat, lng, epsg):
if each_lat==0.0 or each_lng==0.0 or each_epsg==0.0:
final_result.append(each_lat)
continue
new_lat, new_lng = Transformer.from_crs(each_epsg, 4326).transform(each_lat, each_lng)
final_result.append(new_lat)
return pd.Series(final_result)