Anj*_*nju 11 scala apache-spark apache-spark-sql
我正在尝试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中创建模式
gru*_*gie 16
像下面这样的东西应该工作:
import org.apache.spark.sql._
def f(n: List[Int], s: String) : Row =
Row.fromSeq(s.split(",").zipWithIndex.collect{case (a,b) if n.contains(b) => a}.toSeq)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
43343 次 |
最近记录: |