如何使用包含“$”的列名进行查询?
Posted
技术标签:
【中文标题】如何使用包含“$”的列名进行查询?【英文标题】:How to query using column names that include "$"? 【发布时间】:2017-03-06 01:59:32 【问题描述】:在 Spark SQL 中,我可以使用
val spark = SparkSession
.builder()
.appName("SparkSessionZipsExample")
.master("local")
.config("spark.sql.warehouse.dir", "warehouseLocation-value")
.getOrCreate()
val df = spark.read.json("source/myRecords.json")
df.createOrReplaceTempView("shipment")
val sqlDF = spark.sql("SELECT * FROM shipment")
从“myRecords.json”中获取数据,这个json文件的结构是:
df.printSchema()
root
|-- _id: struct (nullable = true)
| |-- $oid: string (nullable = true)
|-- container: struct (nullable = true)
| |-- barcode: string (nullable = true)
| |-- code: string (nullable = true)
我可以得到这个json的具体列如:
val sqlDF = spark.sql("SELECT container.barcode, container.code FROM shipment")
但是我怎样才能从这个 json 文件中获取 id.$oid 呢?
我试过"SELECT id.$oid FROM shipment_log"
或"SELECT id.\$oid FROM shipment_log"
,但根本不起作用。
错误信息:
error: invalid escape character
谁能告诉我如何获得id.$oid
?
【问题讨论】:
【参考方案1】:反引号是你的朋友:
spark.read.json(sc.parallelize(Seq(
""""_id": "$oid": "foo"""")
)).createOrReplaceTempView("df")
spark.sql("SELECT _id.`$oid` FROM df").show
+----+
|$oid|
+----+
| foo|
+----+
同DataFrame
API:
spark.table("df").select($"_id".getItem("$oid")).show
+--------+
|_id.$oid|
+--------+
| foo|
+--------+
或
spark.table("df").select($"_id.$$oid")
+--------+
|_id.$oid|
+--------+
| foo|
+--------+
【讨论】:
以上是关于如何使用包含“$”的列名进行查询?的主要内容,如果未能解决你的问题,请参考以下文章