Python 特征交叉、稀疏矩阵乘法、Spark

Python 特征交叉、稀疏矩阵乘法、Spark,python,apache-spark,sparse-matrix,Python,Apache Spark,Sparse Matrix,我在spark做一个项目,需要应用特征交叉来处理经度和纬度。我目前正在调查。然而,由于它是用scala制造的,我不知道如何转换它,因此我在谷歌上搜索并找到了一个新的版本 因此,对于我的问题,我的数据当前是基于以下代码的数据帧: # Calculate how many buckets needed (Bins) discretizer_Lat = QuantileDiscretizer(numBuckets=100, inputCol="Start_Lat", outputCol="Start_

我在spark做一个项目,需要应用特征交叉来处理经度和纬度。我目前正在调查。然而,由于它是用scala制造的,我不知道如何转换它,因此我在谷歌上搜索并找到了一个新的版本

因此,对于我的问题,我的数据当前是基于以下代码的数据帧:

# Calculate how many buckets needed (Bins)
discretizer_Lat = QuantileDiscretizer(numBuckets=100, inputCol="Start_Lat", outputCol="Start_Lat_disc")
discretizer_Lng = QuantileDiscretizer(numBuckets=100, inputCol="Start_Lng", outputCol="Start_Lng_disc")

# Into categorical values
indexer_cord = [StringIndexer(inputCol=c + "_disc", outputCol=c+"_IDX") for c in ["Start_Lat","Start_Lng"]]

# One-hot 
encoder_cord = OneHotEncoderEstimator(inputCols=[indexer.getOutputCol() for indexer in indexer_cord], outputCols=["{0}_vec".format(indexer.getOutputCol()) for indexer in indexer_cord])

# TODO: Feature cross between data
pipeline_cord = Pipeline(stages=[discretizer_Lat,discretizer_Lng, *indexer_cord, encoder_cord])
preprocessed_cord = pipeline_cord.fit(df).transform(df)

position = VectorAssembler(inputCols=["Start_Lat_IDX_vec","Start_Lng_IDX_vec"], outputCol="position")

df = position.transform(preprocessed_cord)
预处理的数据线包含一个数据帧,我在其中启动了\u Lat\u IDX\u vec和启动了\u Lng\u IDX\u vec,a希望应用特征交叉或我理解的稀疏向量乘法

我要使用的函数:

def coordinateMatrixMultiply(leftmatrix, rightmatrix):
    left  =  leftmatrix.entries.map(lambda e: (e.j, (e.i, e.value)))
    right = rightmatrix.entries.map(lambda e: (e.i, (e.j, e.value)))
    productEntries = left \
        .join(right) \
        .map(lambda e: ((e[1][0][0], e[1][1][0]), (e[1][0][1]*e[1][1][1]))) \
        .reduceByKey(lambda x,y: x+y) \
        .map(lambda e: (*e[0], e[1]))
    return productEntries
问题: 如何发送数据帧作为输入来计算新的稀疏向量