【发布时间】:2020-09-28 08:01:11
【问题描述】:
我想通过应用数据帧中的一些参数来访问 API,获取 Json 响应正文,然后从正文中提取特定键的所有不同值。 然后我需要将此列添加到第一个数据框中。
假设我有一个如下的数据框:
df1:
+-----+-------+--------+
| DB | User | UserID |
+-----+-------+--------+
| db1 | user1 | 123 |
| db2 | user2 | 456 |
+-----+-------+--------+
我想通过提供Df1 的列值作为参数来访问 REST API。
如果我的URL参数是db=db1和User=user1(df1的第一条记录),响应将是以下格式的json格式:
{
"data":[
{
"db": "db1"
"User": "User1"
"UserID": 123
"Query": "Select * from A"
"Application": "App1"
},
{
"db": "db1"
"User": "User1"
"UserID": 123
"Query": "Select * from B"
"Application": "App2"
}
]
}
从这个 json 文件中,我想获取 Application 键的不同值作为数组或列表,并将其作为新列附加到 Df1
我的输出将如下所示:
Final df:
+-----+-------+--------+-------------+
| DB | User | UserID | Apps |
+-----+-------+--------+-------------+
| db1 | user1 | 123 | {App1,App2} |
| db2 | user2 | 456 | {App3,App3} |
+-----+-------+--------+-------------+
我已经提出了一个关于如何实现它的高级计划。
- 添加一个名为响应 URL 的新列,该列由输入中的多个列构建而成。
- 定义一个接受 URL 并返回应用程序数组并将其转换为 UDF 的 scala 函数。
- 通过传递响应 URL 应用 UDF 创建另一列。
由于我对 scala-spark 还很陌生,并且从未使用过 REST API,所以请有人帮我实现这个结果。
欢迎任何其他想法或建议。
我使用的是 spark 1.6。
【问题讨论】:
-
下面的解决方案有帮助吗?
-
@Srinivas 解决方案看起来很完美..谢谢!。我还没有尝试过...访问 API 的问题..我一试就会更新
-
如果您遇到任何问题,请发布。如果有帮助,请投票或接受.. :)
-
它不工作吗??
标签: json scala api rest apache-spark