【发布时间】:2018-01-11 22:52:29
【问题描述】:
我正在尝试修改由外部库生成的数据框。 我收到了一个具有此架构的数据框:
root
|-- child: struct (nullable = true)
| |-- child_id: long (nullable = true)
我想把上面的child结构体包装成一个Array,如下图所示。
root
|-- child: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- child_id: long (nullable = true)
我试图定义一个 UDF:
//the two lines below are an example, in real i get the Dataframe from an external library.
val seq = sc.parallelize(Seq("""{ "child": { "child_id": 1}}"""))
val df = sqlContext.read.json(seq)
val myUDF = udf((x: Row) => Array(x))
val df2 = df.withColumn("children",myUDF($"child"))
但我得到一个例外:“不支持 org.apache.spark.sql.Row 类型的架构”
我正在使用 Spark 2.1.1。
真正的DataFrame是很复杂的,有没有办法修改schema而不列出子表中字段的名称或位置?出于同样的原因,我也不想映射到显式案例类。
提前感谢您的帮助!
【问题讨论】:
标签: scala apache-spark apache-spark-sql