値が「緯度」と「経度」のPYSPARKデータフレームdfがあります。
+---------+---------+
| latitude|longitude|
+---------+---------+
|51.822872| 4.905615|
|51.819645| 4.961687|
| 51.81964| 4.961713|
| 51.82256| 4.911187|
|51.819263| 4.904488|
+---------+---------+
データフレーム列からUTM座標(「x」と「y」)を取得したいと思います。これを行うには、値「longitude」と「latitude」をpyprojから次の関数にフィードする必要があります。結果の「x」と「y」は、元のデータフレームdfに追加されます。これは私がパンダでそれをした方法です:
from pyproj import Proj
pp = Proj(proj='utm',zone=31,ellps='WGS84', preserve_units=False)
xx, yy = pp(df["longitude"].values, df["latitude"].values)
df["X"] = xx
df["Y"] = yy
Pysparkでこれをどのように行いますか?
pandas_udfを使用して、関数に配列をフィードしてから、配列も返します。下記参照:
from pyspark.sql.functions import array, pandas_udf, PandasUDFType
from pyproj import Proj
from pandas import Series
@pandas_udf('array<double>', PandasUDFType.SCALAR)
def get_utm(x):
pp = Proj(proj='utm',zone=31,ellps='WGS84', preserve_units=False)
return Series([ pp(e[0], e[1]) for e in x ])
df.withColumn('utm', get_utm(array('longitude','latitude'))) \
.selectExpr("*", "utm[0] as X", "utm[1] as Y") \
.show()
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加