如何拆分逗号分隔的字符串并在Spark Scala数据帧中获取n个值?

Nar*_*sad 6 scala dataframe apache-spark apache-spark-sql spark-dataframe

如何从arraytypeSpark Scala中的列中仅获取2个数据?我得到的数据就像val df = spark.sqlContext.sql("select col1, col2 from test_tbl").

我有以下数据:

col1  | col2                              
---   | ---
a     | [test1,test2,test3,test4,.....]   
b     | [a1,a2,a3,a4,a5,.....]       
Run Code Online (Sandbox Code Playgroud)

我想获得如下数据:

col1| col2
----|----
a   | test1,test2
b   | a1,a2
Run Code Online (Sandbox Code Playgroud)

当我这样做时df.withColumn("test", col("col2").take(5))它不起作用.它给出了这个错误:

value take不是org.apache.spark.sql.ColumnName的成员

如何按上述顺序获取数据?

Ram*_*ram 1

在里面withColumn你可以调用 udfgetPartialstring 来使用它slice,或者take像下面未经测试的示例代码片段那样的方法。

  import sqlContext.implicits._
  import org.apache.spark.sql.functions._

  val getPartialstring = udf((array : Seq[String], fromIndex : Int, toIndex : Int) 
   => array.slice(fromIndex ,toIndex ).mkString(",")) 
Run Code Online (Sandbox Code Playgroud)

你的来电者会看起来像

 df.withColumn("test",getPartialstring(col("col2"))
Run Code Online (Sandbox Code Playgroud)

col("col2").take(5)失败是因为没有方法,take(..) 这就是您的错误消息显示的原因

错误:值不是 org.apache.spark.sql.ColumnName 的成员

您可以使用 udf 方法来解决这个问题。