2
我有列名的列表中阶状更改列类型反复火花数据帧
var cols = List("col1", "col2", "col3","col4")
我也有在弦与这些列的数据帧,但所有。现在我想通过列表或数据框的列迭代投数据帧的列,因为我列的列表是非常大的,我买不起用这么多.withColumn
参数
由于提前
我有列名的列表中阶状更改列类型反复火花数据帧
var cols = List("col1", "col2", "col3","col4")
我也有在弦与这些列的数据帧,但所有。现在我想通过列表或数据框的列迭代投数据帧的列,因为我列的列表是非常大的,我买不起用这么多.withColumn
参数
由于提前
如果你知道的输出类型与此类似
val df = sc.parallelize(Seq(
("foo", "1.0", "2", "true"),
("bar", "-1.0", "5", "false")
)).toDF("v", "x", "y", "z")
val types = Seq(
("v", "string"), ("x", "double"), ("y", "bigint"), ("z", "boolean")
)
df.select(types.map{case (c, t) => col(c).cast(t)}: _*)
前期的东西它只是映射的问题在列。如果你不知道类型的问题更加棘手。虽然可以创建可以处理模式推理的自定义分析器,但是修改上游流水线可能更有意义。忽略数据类型时使用Avro有什么意义。
您是否尝试过[Schema Inference](http://spark.apache.org/docs/latest/sql-programming-guide.html#inferring-the-schema-using-reflection)? – eliasah
我无法使用模式推理,因为我直接将avro文件读取为火花数据帧。 – nareshbabral
@eliasah重复http://stackoverflow.com/q/34037889/1560062?还是它应该得到自己的答案? – zero323