python-3.x - SQL DDL 解析 JSON 模式文件
问题描述
是否可以在不使用任何工具(仅使用 Scala/Python/shell 脚本)的情况下将 SQL DDL 语句解析为如下所示的简单 JSON 模式文件?
CREATE TABLE TEMP (
ID INT,
NAME STRING)
[
{
"tableName": "temp",
"columns": [
{
"columnname": "id",
"datatype": "int"
},
{
"columnname": "name",
"datatype": "string"
}
]
}
]
解决方案
您可以使用以下逻辑(Scala 代码)从 DDL 创建 JSON 格式的字符串。生成字符串后,将其转换为Dataframe
. 然后使用名为的内置 API 将Dataframe
其作为 JSON 文件保存到 HDFS/Amazon S3中Dataframe's
write.json
import org.apache.spark.sql.types._
import spark.implicits._
val createSql = "CREATE TABLE TEMP (ID INT, NAME STRING)"
var jsonString = """[{"tableName":"""" + createSql.split(" ")(2).toLowerCase + "\"," + "\"columns\":["
createSql.split(s"\\(")(1).split(s"\\)")(0).split(",").map(r => {
jsonString += "{" + "\"columnname\": " + "\"" + r.trim.split(" ")(0).toLowerCase + "\"," + "\"datatype\": " + "\"" + r.trim.split(" ")(1).toLowerCase + "\"},"
})
jsonString = jsonString.patch(jsonString.lastIndexOf(','), "", 1) + "]}]"
val schema: StructType = null
val reader = spark.read
Option(schema).foreach(reader.schema)
val df = reader.json(sc.parallelize(Array(jsonString)))
df.coalesce(1).write.json("<targetlocation>")
请让我知道,如果你有任何问题。
推荐阅读
- windows - 如何访问 docker 容器内的 localhost API?
- vim - 如何在 git bash commit 中保存退出 nvim
- oauth-2.0 - Auth0 checkSession 调用更新返回 HTML 错误页面
- c# - 选中如何根据单选按钮控制 ComboBox 的可见性
- docker - 如何安全地将连接字符串放入 heroku 中的 docker 容器中?
- python - 在没有 for 循环的情况下递增 i
- amazon-s3 - 如何使用 Lambda 函数将 Amazon RDS 数据库备份到 S3 存储桶
- c++ - 绘制圆柱体的顶部和底部
- node.js - 无法访问 mongoose 中的实例字段
- .net - 非 .net 核心版本的自动映射器