首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala Apache Spark:列名中的非标准字符

Scala Apache Spark:列名中的非标准字符
EN

Stack Overflow用户
提问于 2016-08-09 16:40:34
回答 2查看 1.2K关注 0票数 0

我打电话给下面的人:

代码语言:javascript
复制
  propertiesDF.select(
        col("timestamp"), col("coordinates")(0) as "lon", 
        col("coordinates")(1) as "lat", 
        col("properties.tide (above mllw)") as "tideAboveMllw",
        col("properties.wind speed") as "windSpeed")

这给了我以下错误:

org.apache.spark.sql.AnalysisException:在气温、大气压、露点、主导波周期、平均波向、名称、节目名称、有效波高、潮位(高于mllw)、能见度、水温、风向、风速等条件下,均无此类结构场潮(高于mllw);

现在肯定有这样一个结构域。(错误消息本身就是这样说的。)

下面是模式:

代码语言:javascript
复制
 root
 |-- timestamp: long (nullable = true)
 |-- coordinates: array (nullable = true)
 |    |-- element: double (containsNull = true)
 |-- properties: struct (nullable = true)
 |    |-- air temperature: double (nullable = true)
 |    |-- atmospheric pressure: double (nullable = true)
 |    |-- dew point: double (nullable = true)
          .
          .
          .
 |    |-- tide (above mllw):: string (nullable = true)
          .
          .
          .

输入读入为JSON,如下所示:

代码语言:javascript
复制
val df = sqlContext.read.json(dirName)

如何处理列名中的括号?

EN

回答 2

Stack Overflow用户

发布于 2016-08-09 16:59:41

首先,您应该避免这样的名称,但是您可以拆分访问路径:

代码语言:javascript
复制
val df = spark.range(1).select(struct(
  lit(123).as("tide (above mllw)"),
  lit(1).as("wind speed")
).as("properties"))

df.select(col("properties").getItem("tide (above mllw)"))

// or

df.select(col("properties")("tide (above mllw)"))

或将有问题的字段用回标括起来:

代码语言:javascript
复制
df.select(col("properties.`tide (above mllw)`"))

这两种解决方案都假设数据包含以下结构(基于用于查询的访问路径):

代码语言:javascript
复制
df.printSchema
// root
//  |-- properties: struct (nullable = false)
//  |    |-- tide (above mllw): integer (nullable = false)
//  |    |-- wind speed: integer (nullable = false)
票数 2
EN

Stack Overflow用户

发布于 2016-08-09 16:51:55

基于文献资料,您可以尝试使用单引号。如下所示:

代码语言:javascript
复制
 propertiesDF.select(
        col("timestamp"), col("coordinates")(0) as "lon", 
        col("coordinates")(1) as "lat", 
        col("'properties.tide (above mllw)'") as "tideAboveMllw",
        col("properties.wind speed") as "windSpeed")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38856240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档