arrays - 单个元素的低阶 Spark Dataframe Array 连接
问题描述
我正在使用 Spark 3.x 高阶数组函数,如下所示:
%scala
import org.apache.spark.sql.functions._
import org.apache.spark.sql.types._
import org.apache.spark.sql.Column
val arrayStructureData = Seq(
Row(1,List(2,5,1,3),List(0.1, 0.5, 0.7, 0.8)),
Row(2,List(2,1),List(0.2, 0.3)),
Row(1,List(1,5),List(0.4, 0.3)),
Row(2,List(3,2),List(0.0, 0.1))
)
// Just a single StructType for the Row
val arrayStructureSchema = new StructType()
.add("id",IntegerType)
.add("prop1", ArrayType(IntegerType))
.add("values", ArrayType(DoubleType))
val df = spark.createDataFrame(
spark.sparkContext.parallelize(arrayStructureData),arrayStructureSchema)
df.printSchema()
df.show()
val resDF = df.withColumn(
"jCols",
zip_with(
col("prop1"),
col("values"),
(left: Column, right: Column) => array(left, right)
)
)
resDF.show(false)
resDF.printSchema()
以便在 2 个数组的位置上连接单个数组元素以获得新的子数组。这很好用。
例如
[3, 2]| [0.0, 0.1]
返回:
[[3.0, 0.0], [2.0, 0.1]]
我的问题是,如果没有 zip_with,我无法立即看到我将如何做到这一点,我们将如何以最简单的方式做到这一点?UDF?
很好的参考:https ://mungingdata.com/spark-3/array-exists-forall-transform-aggregate-zip_with/但对更硬的裸机方式感兴趣。
解决方案
推荐阅读
- angular - Angular Universal 将 favicon.ico 视为服务器端的路由
- java - 构建功能测试时出错
- reactjs - React Router 刷新 url 但不刷新页面
- java - 使用 Spring Boot 验证 Generic Rest Api
- salesforce - 无法安装@salesforce/lwc-dev-server
- excel - 从 Microsoft CSV 读取大数据并写入 AWS 中的 Microsoft Excel 的策略
- amazon-athena - LOCATION 对于 Amazon Athena 中的数据库的用途是什么?
- python - 如何在轴上绘制时间图
- android - 如何使用 SwitcpMap 观察三个数据?
- python - vscode python模块智能感知不起作用