如何将大型struct列添加到dataframe

时间:2017-08-17 06:16:10

标签: scala apache-spark apache-spark-sql case-class

我想在数据框中添加一个struct列,但该结构包含 100 个字段。
我了解到案例类可以更改为struct列,但案例类的限制不超过22个字段(在线spark为1.6.3,scala为2.10.4)。
正常班级可以这样做吗?我必须实现哪些功能或界面?
还有一个“ org.apache.spark.sql.functions.struct ”,但似乎无法设置结构字段的名称。 谢谢。

2 个答案:

答案 0 :(得分:2)

  

但似乎无法设置结构字段的名称。

你可以。例如:

import org.apache.spark.sql.functions._

spark.range(1).withColumn("foo", 
   struct($"id".alias("x"), lit("foo").alias("y"), struct($"id".alias("bar")))
).printSchema

root
 |-- id: long (nullable = false)
 |-- foo: struct (nullable = false)
 |    |-- x: long (nullable = false)
 |    |-- y: string (nullable = false)
 |    |-- col3: struct (nullable = false)
 |    |    |-- bar: long (nullable = false)

答案 1 :(得分:0)

无需为此结构定义案例类,您可以通过以下方式创建结构类型:

val struct =
  StructType(
    StructField("a", IntegerType, true) ::
    StructField("b", LongType, false) ::
    StructField("c", BooleanType, false) :: Nil)

这个结构可以有任意长度。

然后你可以这样读取数据框

val df = sparkSession.read.schema(struct).//your read method