我試圖運用馬賽克的grid_pointascellid方法火花dataframe“緯度”,“朗”列。
' ' '
進口pyspark.sql。函數作為F
#創建一個火花DataFrame緯度和經度列
df = spark.createDataFrame ([
(“point1”, 10.0, 20.0),
(“卷簾窗”,30.0,40.0),
(“point3”, 50.0, 60.0),
]、[“名稱”、“緯度”、“朗”))
# DataFrame的打印結果
df.show ()
df1 = df。withColumn (“id”, grid_pointascellid (st_point (df(“朗”),df(“緯度”)),點燃(7)))
df1.show ()
' ' '
dataframe的模式是:
' ' '
| - - -名稱:字符串(nullable = true)
|——緯度:小數(9,6)(可空= true)
|——液化天然氣:小數(9,6)(可空= true)
' ' '
例外:
org.apache.spark。SparkException:工作階段失敗而終止:任務0階段251.0失敗了4次,最近的失敗:在舞台上失去了任務0.3 251.0 (TID 15016)(10.138.221.80執行人50):. lang。org.apache.spark.sql.types ClassCastException。十進製java.lang.Double不能投
https://databrickslabs.github.io/mosaic/api/spatial-indexing.html?highlight=grid_boundary網格點……
這個錯誤出現,因為函數grid_pointascellid預計一種雙列和小數列類型提供了作為輸入。
為了克服這一點,在你應用grid_pointascellid之前,我建議列緯度和經度。
df1 = df。withColumn(“緯度”,df(“緯度”).cast(“雙”))。withColumn(“朗”,df(“朗”).cast(“雙”))
df2 = df1。withColumn (“id”, grid_pointascellid (st_point (df1“朗”,df1[“緯度”]),點燃(7)))
df2.show ()
通過執行這個明確的投在調用馬賽克功能之前,我能夠得到以下輸出。
|名稱。| lat。|經度。| | id
| point1。| 10.0。| 20.0。| 609880166050562047 |
|卷簾窗。| 30.0 | 40.0。| 609448747927076863 |
| point3。| 50.0 | 60.0。| 608566547836829695 |