scala - SparkSQL:如何根据列名选择列值
问题描述
我正在使用具有以下架构的数据框:
root
|-- Id: integer (nullable = true)
|-- defectiveItem: string (nullable = true)
|-- item: struct (nullable = true)
| |-- gem1: integer (nullable = true)
| |-- gem2: integer (nullable = true)
| |-- gem3: integer (nullable = true)
defectiveItem
列包含 , 中的值,gem1
并包含项目的计数。现在根据缺陷项,我需要将给定缺陷项的计数从一个名为的新列中投影出来。gem2
gem3
item
item
count
例如,如果defectiveItem
列包含gem1
并且item
包含{"gem1":3,"gem2":4,"gem3":5}
结果count
列应该包含 3。
生成的架构应如下所示:
root
|-- Id: integer (nullable = true)
|-- defectiveItem: string (nullable = true)
|-- item: struct (nullable = true)
| |-- gem1: integer (nullable = true)
| |-- gem2: integer (nullable = true)
| |-- gem3: integer (nullable = true)
|-- count: integer (nullable = true)
解决方案
udf
您可以使用以下函数获取所需的输出数据框
import org.apache.spark.sql.functions._
def getItemUdf = udf((defectItem: String, item: Row)=> item.getAs[Int](defectItem))
df.withColumn("count", getItemUdf(col("defectiveItem"), col("item"))).show(false)
希望回答有用
推荐阅读
- blazor - Blazor IL 修剪(几乎)没有结果
- outlook - 使用 php 将会议邀请发送到 Outlook 房间
- flutter - 一个RenderFlex右边溢出了3.0像素/Flutter
- python - 熊猫数据框根据名称对列进行分组并应用函数
- excel - 是否有一个单元格公式可以在 EXCEL 中获得一个逗号分隔的列表,其中的数字越来越多
- ssl - 在 Kafka 中混合仅 SSL 和纯文本主题
- python - 从 Android 客户端调用在 Azure VM 中运行的 python 函数
- c# - 如何使用 ASP.NET CORE 将 Excel 文件中的数据拆分为 2 个文件
- iphone - GADRewardedInterstitialAd : 如何每天只展示 3 个广告并为玩家提供 3 次奖励?
- xml - 根据 XSD 1.0 中的日期范围验证枚举?