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