scala - 合并数组中的 Apache Spark 列和结构数组中的结构
问题描述
这是传入数据流的模式。我使用 spark 2.3.2 流式处理数据。
val schema = StructType(Seq(
StructField("status", StringType),
StructField("data", StructType(Seq(
StructField("resultType", StringType),
StructField("result", ArrayType(StructType(Array(
StructField("metric", StructType(Seq(StructField("application", StringType),
StructField("component", StringType),
StructField("instance", StringType)))),
StructField("value", ArrayType(StringType))
))))
)
))))
这是我将模式应用于 dstream 的 rdd 的方式。
val df = rdd.toDS()
.selectExpr("cast (value as string) as myData")
.select(from_json($"myData", schema).as("myData"))
.select($"myData.data.*")
.select("result")
上面的代码产生以下输出
{"result":[{"metric":{"application":"A","component":"S","instance":"tp01.net:9072"},"value":["1.542972576979E9","237006995456"]},
{"metric":{"application":"A","component":"S","instance":"tp02.net:9072"},"value":["1.542972576979E9","237006995456"]},
{"metric":{"application":"A","component":"S","instance":"tp03.net:9072"},"value":["1.542972576979E9","237006995456"]},
{"metric":{"application":"B","component":"S","instance":"bp03.net:9072"},"value":["1.542972576979E9","270860144640"]},
{"metric":{"application":"B","component":"S","instance":"bp04.net:9072"},"value":["1.542972576979E9","270860144640"]},
{"metric":{"application":"B","component":"S","instance":"ps01.net:9072"},"value":["1.542972576979E9","135177400320"]},
]}
但是为了提取特征,我需要将上面的转换为下面的数据框
application component instance value1 value2
A S tp01.net:9072 1.542972576979E9 237006995456
A S tp02.net:9072 1.542972576979E9 237006995456
A S tp03.net:9072 1.542972576979E9 237006995456
B S bp03.net:9072 1.542972576979E9 270860144640
B S bp04.net:9072 1.542972576979E9 270860144640
B S ps01.net:9072 1.542972576979E9 135177400320
如您所见,每一行已经是分解的行。关于如何将数组值和结构选择到单个数据框中的任何想法?
谢谢
解决方案
推荐阅读
- php - yii2 swiftmailer 无法发送邮件
- python - 如何将多 fasta 文件拆分为相等序列长度的块并使用 biopython 更改标题
- visual-studio-code - 通过 URL 处理打开文件不会在文件自己的工作区中打开文件
- android - 与 AppTheme 冲突我的应用程序无法使用内置的 actionBar,但其中一个库需要 AppTheme 中的 actionBar
- stored-procedures - 使用 Gridview 插入数据,只输入第一行,忽略后续行
- wildfly - 如何修复 Active MQ Wildfly 警告 - 页面文件 000002707.page 在记录号 9 的位置 373,401 处的记录不完整?
- c# - 在 C# 中删除控制台滚动条后留下的空间
- javascript - 密码值返回未定义,但是当使用console.log显示时,用户可以看到
- eclipse - 即使跨 Ubuntu 上的其他窗口,Eclipse CDT 覆盖弹出工具提示消息也不会消失
- firebase - 是否可以删除 currentUser firebase 身份验证用户?