小编sya*_*dav的帖子

如何使用Scala从Spark中的List或Array创建Row

我正在尝试org.apache.spark.sql.catalyst.expressions.Row根据用户输入创建一个Row().我无法随机创建一行.

是否有任何功能可以从List或创建一个行Array.

例如,如果我有一个.csv格式如下的文件,

"91xxxxxxxxxx,21.31,15,0,0"
Run Code Online (Sandbox Code Playgroud)

如果用户输入[1, 2]那么我只需要第二列和第三列以及customer_id第一列

我尝试用代码解析它:

val l3 = sc.textFile("/SparkTest/abc.csv").map(_.split(" ")).map(r => (foo(input,r(0)))) `
Run Code Online (Sandbox Code Playgroud)

其中foo定义为

def f(n: List[Int], s: String) : Row = {
    val n = input.length
    var out = new Array[Any](n+1)
    var r = s.split(",")
    out(0) = r(0)
    for (i <- 1 to n)
        out(i) = r(input(i-1)).toDouble
    Row(out)
}
Run Code Online (Sandbox Code Playgroud)

和输入是一个List说

val input = List(1,2)
Run Code Online (Sandbox Code Playgroud)

执行此代码我得到l3:

Array[org.apache.spark.sql.Row] = Array([[Ljava.lang.Object;@234d2916])
Run Code Online (Sandbox Code Playgroud)

但我想要的是:

Array[org.apache.spark.sql.catalyst.expressions.Row] = Array([9xxxxxxxxxx,21.31,15])`
Run Code Online (Sandbox Code Playgroud)

必须传递此内容才能在Spark SQL中创建模式

scala apache-spark apache-spark-sql

11
推荐指数
1
解决办法
4万
查看次数

标签 统计

apache-spark ×1

apache-spark-sql ×1

scala ×1