apache-spark - 如何将 spark 数据框模式存储在 databricks 笔记本的变量中?
问题描述
使用 spark scala azure 数据块。
我有一个包含 100 多列的数据框(df1)。我需要创建另一个数据框(df2)并且也希望有相同的模式。如何将 df1 的模式存储到变量中并应用于 df2
val inputDF = Seq(("00163E0F765C1ED79593228BF70CEE41" ,"PD PUMPS")
,("00164E0F775C1ED79593228BF70CEE42" ,"PD PUMPS")
,("00165E0F785C1ED79593228BF70CEE43" ,"PD PUMPS")
,("00166E0F795C1ED79593228BF70CEE44" ,"PD PUMPS")
,("00167E0F405C1ED79593228BF70CEE45" ,"PD PUMPS")
).toDF("objectID")
val expectedDF = Seq(("00163E0F765C1ED79593228BF70CEE41" ,"PD PUMPS1")
,("00164E0F775C1ED79593228BF70CEE42" ,"PD PUMPS1")
,("00165E0F785C1ED79593228BF70CEE43" ,"PD PUMPS1")
,("00166E0F795C1ED79593228BF70CEE44" ,"PD PUMPS1")
,("00167E0F405C1ED79593228BF70CEE45" ,"PD PUMPS1")
).toDF("objectID","equipmentName", inputDF.schema)
这样做的目的是:我实际上正在编写单元测试用例。我有一个函数将一列添加到传递的数据框中(参数化)。所以我需要创建 inputDF,然后我需要在 inputDF 中再创建 1 列的 expectedDF。
解决方案
鉴于对于 inputDF 生成,您应该使用仅包含一列的序列(或在 toDF 方法中传递两个字符串),我将执行以下操作:
val inputDF = Seq(("00163E0F765C1ED79593228BF70CEE41")
,("00164E0F775C1ED79593228BF70CEE42")
,("00165E0F785C1ED79593228BF70CEE43")
,("00166E0F795C1ED79593228BF70CEE44")
,("00167E0F405C1ED79593228BF70CEE45")
).toDF("objectID")
val seq = Seq(("00163E0F765C1ED79593228BF70CEE41" ,"PD PUMPS1")
,("00164E0F775C1ED79593228BF70CEE42" ,"PD PUMPS1")
,("00165E0F785C1ED79593228BF70CEE43" ,"PD PUMPS1")
,("00166E0F795C1ED79593228BF70CEE44" ,"PD PUMPS1")
,("00167E0F405C1ED79593228BF70CEE45" ,"PD PUMPS1")
)
val rdd = spark.sparkContext.parallelize(seq)
val rows: RDD[Row] = rdd.map((row: (String, String)) => {
Row(row.productIterator.toList:_*)
})
val expectedDF = spark.createDataFrame(rows,
inputDF.schema.add(StructField("NewColumn", org.apache.spark.sql.types.StringType )))
df.show()
这个想法是使用 createDataFrame 从序列中创建一个 Dataframe,并将旧数据帧的模式(即 StructType)传递给它,并添加一个条目(StructField)。
推荐阅读
- pine-script - 关于 Pine-script 的问题:执行多行替代代码
- python - linux CAN协议最大速率
- python - Heroku 工作人员无法在同一个 Dyno 上的 Web 文件夹上写入
- python - OpenCV:从单应矩阵投影 3D 点
- javascript - 发送推送通知时解析服务器云代码错误
- npm - 如何在 debian 上安装 npm,收到 Unable to correct questions,你有损坏的包
- php - 基本社交网络 Robin's Nest 的介绍性 PHP 书籍示例
- python - 如何在点云中的 3D 边界框的 RGBD 帧序列上拥有 2D 边界框?
- php - php使用foreach在smarty中嵌套while循环
- javascript - 如何使 node.js mysql 中的图像文件夹可访问