簡體   English   中英

使用Spark創建一個二維數組(pyspark)

[英]Creating a bidimensional array with Spark (pyspark)

在Spark中使用Python 2.7時,我在2維中有兩個點列表。 列表An點,列表Bm點。 每個點由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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM