【问题标题】:Ambiguous schema in Spark ScalaSpark Scala 中的模棱两可的模式
【发布时间】:2018-08-29 21:37:28
【问题描述】:

架构:

|-- c0: string (nullable = true)
|-- c1: struct (nullable = true)
|    |-- c2: array (nullable = true)
|    |    |-- element: struct (containsNull = true)
|    |    |    |-- orangeID: string (nullable = true)
|    |    |    |-- orangeId: string (nullable = true)

我正在尝试在 spark 中展平上述架构。

代码:

var df = data.select($"c0",$"c1.*").select($"c0",explode($"c2")).select($"c0",$"col.orangeID", $"col.orangeId")

扁平化代码运行良好。问题出在最后一部分,其中 2 列仅相差 1 个字母(orangeID 和 orangeId)。因此我收到此错误:

错误:

org.apache.spark.sql.AnalysisException: Ambiguous reference to fields StructField(orangeID,StringType,true), StructField(orangeId,StringType,true);

任何避免这种歧义的建议都会很棒。

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:

    开启spark sql区分大小写配置并尝试

    spark.sql("set spark.sql.caseSensitive=true")
    

    【讨论】:

    • 在 pyspark 2.3 中,这似乎不适用于这种语法。相反: conf.set("spark.sql.caseSensitive", "true") 在您的 SparkConf 实例上
    • 参数和它的值将是相同的。您正在从 eclipse 或 ide 运行,那么您需要使用 sparkconf 进行任何配置
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-13
    • 1970-01-01
    相关资源
    最近更新 更多