python - 特征交叉、稀疏矩阵乘法、Spark
问题描述
我正在 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)
preprocessed_cord包含我有Start_Lat_IDX_vec和Start_Lng_IDX_vec的数据框,并且想应用特征交叉或在我的理解中稀疏向量乘法。
我想使用的功能:
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
问题: 如何发送数据帧作为输入来计算新的稀疏向量?
解决方案
推荐阅读
- javascript - 如何跨多个 iframe(同一个域)创建点击事件?
- wordpress - 如何将 WordPress 连接到 AWS Aurora 无服务器 MySQL?
- c - 在从文件创建链表的循环中使用 free() 时出现问题
- rust - 使用 vec 中的关联值验证枚举的唯一性
- android - 检索 Room Android 生成的 SQL 查询
- java - 允许一定数量的用户连接到服务器 [JAVA]
- python - 获取 ImportError /usr/lib/x86_64-linux-gnu/libstdc++.so.6:找不到版本“CXXABI_1.3.11”
- image - 如何在 Flutter 中添加加速度计视差效果?
- java - Expo-ejected 应用程序因 java.net.ConnectException 而崩溃
- android - Android 上的 react-native 跨平台工作 | ios和网页?