从csv文件创建一个DataFrame,处理每一行,想创建一个具有相同列数的新行。
val df = spark.read.format("csv").load("data.csv")
def process(line: Row) : Seq[String] = {
val list = new ArrayList[String]
for (i <- 0 to line.size-1) {
list.add(line.getString(i).toUpperCase)
}
list.asScala.toSeq
}
val df2 = df.map(process(_))
df2.show
期望/希望得到:
+---+---+---+
| _1| _2| _3|
+---+---+---+
| X1| X2| X3|
| Y1| Y2| Y3|
+---+---+---+
获取:
+------------+
| value|
+------------+
|[X1,X2,X3]|
|[Y1,Y2,Y3]|
+------------+
输入文件data.csv:
x1,x2,x3
y1,y2,y3
请注意,代码也应在此输入文件中起作用:
x1,x3,x4
y1,y3,y4
对于这个输入文件,我想查看结果
+---+---+---+---+
| _1| _2| _3| _4|
+---+---+---+---+
| X1| X2| X3| X4|
| Y1| Y2| Y3| Y4|
+---+---+---+---+
请注意,我在process()中使用了tpUpperCase()只是为了使简单的示例起作用。 process()中的实际逻辑可能要复杂得多。