【发布时间】:2018-01-10 16:05:26
【问题描述】:
我正在使用下面链接中的代码来展平嵌套数据框Flatten a DataFrame in Scala with different DataTypes inside .... 我收到以下错误:
线程“主”org.apache.spark.sql.AnalysisException 中的异常: 参考“alternateIdentificationQualifierCode”不明确,可以 是:alternateIdentificationQualifierCode#2, 替代识别限定符代码#11.; 在 org.apache.spark.sql.catalyst.plans.logical.LogicalPlan.resolve(LogicalPlan.scala:287) 在 org.apache.spark.sql.catalyst.plans.logical.LogicalPlan.resolveChildren(LogicalPlan.scala:171) 在 org.apache.spark.sql.catalyst.analysis.Analyzer$ResolveReferences$$anonfun$apply$10$$anonfun$applyOrElse$4$$anonfun$26.apply(Analyzer.scala:470) 在 org.apache.spark.sql.catalyst.analysis.Analyzer$ResolveReferences$$anonfun$apply$10$$anonfun$applyOrElse$4$$anonfun$26.apply(Analyzer.scala:470) 在 org.apache.spark.sql.catalyst.analysis.package$.withPosition(package.scala:48) 在 org.apache.spark.sql.catalyst.analysis.Analyzer$ResolveReferences$$anonfun$apply$10$$anonfun$applyOrElse$4.applyOrElse(Analyzer.scala:470) 在 org.apache.spark.sql.catalyst.analysis.Analyzer$ResolveReferences$$anonfun$apply$10$$anonfun$applyOrElse$4.applyOrElse(Analyzer.scala:466) 在 org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$transformUp$1.apply(TreeNode.scala:335) 在 org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$transformUp$1.apply(TreeNode.scala:335) 在 org.apache.spark.sql.catalyst.trees.CurrentOrigin$.withOrigin(TreeNode.scala:69) 在 org.apache.spark.sql.catalyst.trees.TreeNode.transformUp(TreeNode.scala:334) 在 org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$5.apply(TreeNode.scala:332) 在 org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$5.apply(TreeNode.scala:332) 在 org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$4.apply(TreeNode.scala:281) 在 scala.collection.Iterator$$anon$11.next(Iterator.scala:328)
有什么方法可以在 scala 的 spark-dataframes 中以编程方式即时重命名列,谢谢。 \
代码:
object flatten {
def main(args: Array[String]) {
if (args.length < 1) {
System.err.println("Usage: XMLParser.jar <config.properties>")
println("Please provide the Configuration File for the XML Parser Job")
System.exit(1)
}
val sc = new SparkContext(new SparkConf().setAppName("Spark XML Process"))
val sqlContext = new HiveContext(sc)
val prop = new Properties()
prop.load(new FileInputStream(args(0)))
val dfSchema = sqlContext.read.format("com.databricks.spark.xml").option("rowTag",prop.getProperty("xmltag")).load(prop.getProperty("input"))
val flattened_DataFrame=flattenDf(dfSchema)
// flattened_DataFrame.printSchema()
}
【问题讨论】:
-
你试过用ColumnRenamed api吗?
-
您是否可以提供任何有用的示例,我只需要动态重命名列,每次都会不断变化
-
列数是固定的吗?
-
no.. 如果您实际查看该链接中的代码,它会像这样迭代数组中的每个元素
-
val 字段 = df.schema.fields
标签: scala spark-dataframe