[英]Creating a bidimensional array with Spark (pyspark)
在Spark中使用Python 2.7時,我在2維中有兩個點列表。 列表A有n點,列表B有m點。 每個點由2個元素(x和y坐標)的列表表示:
set_a = [[x1, y1], [x2, y2], ..., [xn, yn]]
set_b = [[x1, y1], [x2, y2], ..., [xm, ym]]
我想構建一個n*m
矩陣M ,其中通用元素M[i][j]
包含索引為i的 A點與索引為j的 B點之間的距離。 我不是在討論歐幾里德距離,但是我有我的personal_distance_function(point_a, point_b)
,我想將其用於構建M。
在純Python 2.7中,我目前正在執行以下操作:
for i in range(len(A)):
for j in range(len(B)):
M[i, j] = personal_distance_function(A[i], B[j])
...但是由於我需要使用pyspark進行此操作,因此您對如何使用SparkContext進行操作有何建議?
首先,您需要將列表轉換為數據框:
>>> df_a = spark.createDataFrame(set_a, ['a_x', 'a_y'])
>>> df_b = spark.createDataFrame(set_b, ['b_x', 'b_y'])
然后,您需要創建一個UDF(用戶定義的函數)以在spark中注冊您的函數:
>>> from pyspark.sql.functions import udf, struct
>>> from pyspark.sql.types import DoubleType
>>> dist = udf(personal_distance_function, DoubleType())
最后,您可以使用簡單的Spark代碼交叉連接兩個數據框,並對它們執行距離函數:
>>> df_a.crossJoin(df_b) \
.withColumn('dist', dist(struct('a_x', 'a_y'), struct('b_x', 'b_y'))).show()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.