[英]Split Comma Separated values in a scala dataframe into several lines
[英]How to split comma separated string and get n values in Spark Scala dataframe?
如何从Spark Scala中的arraytype
列中仅获取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,.....]
我想获得如下数据:
col1| col2
----|----
a | test1,test2
b | a1,a2
当我正在做df.withColumn("test", col("col2").take(5))
它不起作用。 它给出了这个错误:
value take不是org.apache.spark.sql.ColumnName的成员
如何按上述顺序获取数据?
在withColumn
里面你可以调用getPartialstring
,你可以使用slice
或take
方法,如下面的示例代码段untested。
import sqlContext.implicits._
import org.apache.spark.sql.functions._
val getPartialstring = udf((array : Seq[String], fromIndex : Int, toIndex : Int)
=> array.slice(fromIndex ,toIndex ).mkString(","))
你的来电者会显得像
df.withColumn("test",getPartialstring(col("col2"))
col("col2").take(5)
失败,因为列没有方法take(..)
这就是你的错误信息所说的原因
错误:value take不是org.apache.spark.sql.ColumnName的成员
您可以使用udf方法来解决这个问题。
您可以使用数组Column的apply
函数将每个项目获取到某个索引,然后使用array
函数构建一个新数组:
import spark.implicits._
import org.apache.spark.sql.functions._
// Sample data:
val df = Seq(
("a", Array("a1", "a2", "a3", "a4", "a5", "a6")),
("a", Array("b1", "b2", "b3", "b4", "b5")),
("c", Array("c1", "c2"))
).toDF("col1", "col2")
val n = 4
val result = df.withColumn("col2", array((0 until n).map($"col2"(_)): _*))
result.show(false)
// +----+--------------------+
// |col1|col2 |
// +----+--------------------+
// |a |[a1, a2, a3, a4] |
// |a |[b1, b2, b3, b4] |
// |c |[c1, c2, null, null]|
// +----+--------------------+
请注意,对于阵列小于n
记录,这将使用null
s“填充”结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.