我从一个xml文件中倒入了一个列,这个列的内容是[3.0,1],[3.0,2],[3.0,3]这种二维数组,其中后一个数1,2,3是其索引。我用下面赋值模拟出来了。
scala> val df1 = sc.parallelize(List(("[34.0,1],[34.0,2],[175.0,3]", 30), ("[3.0,1],[3.0,2],[3.0,3]", 36), ("[127.0,1],[127.0,2],[127.0,3]", 27))).toDF("infoComb", "age")
df1: org.apache.spark.sql.DataFrame = [infoComb: string, age: int]scala> df1.show(false)
+-----------------------------+---+
|infoComb                     |age|
+-----------------------------+---+
|[34.0,1],[34.0,2],[175.0,3]  |30 |
|[3.0,1],[3.0,2],[3.0,3]      |36 |
|[127.0,1],[127.0,2],[127.0,3]|27 |
+-----------------------------+---+我的问题是:我怎么样在scala中把[127.0,1]的127.0取出来? 麻烦各位大侠看看。

解决方案 »

  1.   

    其实虽然模拟了,但是数据类型不同,在数据库中infoComb   这个字段是以array<struct<_VALUE:double,_i:bigint>> 这种数据类型存在
      

  2.   

    收回前一个答案,既然spark对于相应的列有了类型上的规定,当然是可以
    进行遍历的。
    我记得好像是wrapped 序列相关
    你可以尝试对于该df进行map操作
    使用getAS[T] 函数将相应的列转换为你需要的模板序列类型,
    之后再装换成你想要的类型(调用若干to函数)如果你有intellji idea这样的推断编辑器,可以将要使用的类型直接显示
    出来,如在intelllji idea中使用 alt + enter
    光标停在的那个对象就会显示出它的类型。