如何以递归方式获取 Spark DataFrame 中的所有列

添加意义

我想获取 DataFrame 的所有列。如果 DataFrame 具有平面结构(没有嵌套的 StructTypes),则会df.columns产生正确的结果。我也想返回所有嵌套的列名,例如

给定的

val schema = StructType(
  StructField("name", StringType) ::
  StructField("nameSecond", StringType) ::
  StructField("nameDouble", StringType) ::
  StructField("someStruct", StructType(
    StructField("insideS", StringType)::
    StructField("insideD", DoubleType)::
    Nil
  )) ::
  Nil
)
val rdd = spark.sparkContext.emptyRDD[Row]
val df = spark.createDataFrame(rdd, schema)

我想得到

Seq("name", "nameSecond", "nameDouble", "someStruct", "insideS", "insideD")
扎克·佐哈尔

您可以使用此递归函数来遍历架构:

def flattenSchema(schema: StructType): Seq[String] = {
  schema.fields.flatMap {
    case StructField(name, inner: StructType, _, _) => Seq(name) ++ flattenSchema(inner)
    case StructField(name, _, _, _) => Seq(name)
  }
}

println(flattenSchema(schema)) 
// prints: ArraySeq(name, nameSecond, nameDouble, someStruct, insideS, insideD)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用Java连接Spark DataFrame中的所有列?

如何从 spark DataFrame 获取所有行?

Spark,DataFrame:从许多列中获取所有不同的字符串

在 Apache Spark DataFrame 中,如何刪除所有非 None 值都相同的所有列?

在Map列的Spark DataFrame中,如何使用所有键的常量更新值

如何以编程方式获取Spark集群中所有节点的主机名

在Spark中获取DataFrame列的值

如何计算Spark Dataframe中的列数?

Spark Dataframe-如何从行中的列获取特定字段

Spark Dataframe-获取所有成对列表(Scala)

获取Spark DataFrame中两个日期之间的所有日期

在 Spark DataFrame 中添加一个新列,其中包含一列的所有值的总和 - Scala/Spark

Spark DataFrame联合递归

加入后,Spark SQL DataFrame从别名表中删除所有列

如何在Spark中将DataFrame的所有列(带有嵌套的StructTypes)转换为字符串

如何在spark scala Dataframe中找到所有具有空值或NA值的列列表?

Spark 提供 DataFrame groupBy 中所有列的列表

来自Array列的所有组合的Spark Dataframe

在Spark Dataframe中的所有列名称中替换空白

如何解析DataFrame列中的所有值?

如何创建宏以遍历Pandas Dataframe中的所有列?

如何映射列以在Spark SQL DataFrame中创建新列?

Spark DataFrame,如何聚合列序列?

从Spark DataFrame列中的数组获取最小值

如何检测Spark DataFrame是否具有列

如何为具有许多列的Spark DataFrame定义架构

当 DataFrame 有列时,如何使用 Java Apache Spark MLlib?

\列出Spark当前会话/内存中的所有DataFrame

DBI / Spark:如何将结果存储在Spark Dataframe中?