arrays - 将 Array[String] 的 Spark 列拆分为 String 列

标签 arrays string apache-spark split

如果我有一个包含一列 Array[String] 的数据框:

scala> y.show
+---+----------+
|uid|event_comb|
+---+----------+
|  c|  [xx, zz]|
|  b|  [xx, xx]|
|  b|  [xx, yy]|
|  b|  [xx, zz]|
|  b|  [xx, yy]|
|  b|  [xx, zz]|
|  b|  [yy, zz]|
|  a|  [xx, yy]|
+---+----------+

如何拆分列 "event_comb"分成两列(例如 "event1""event2" )?

最佳答案

如果您的列类型是 list 或 Map 您可以使用 getItem 函数来获取值
getItem(Object key)

An expression that gets an item at position ordinal out of an array, or gets a value by key key in a MapType.


val data = Seq(
    ("c", List("xx", "zz")),
  ("b", List("xx", "xx")),
  ("b", List("xx", "yy")),
  ("b", List("xx", "zz")),
  ("b", List("xx", "yy")),
  ("b", List("xx", "zz")),
  ("b", List("yy", "zz")),
  ("a", List("xx", "yy"))
  ).toDF("uid", "event_comb")

  data.withColumn("event1", $"event_comb".getItem(0))
      .withColumn("event2", $"event_comb".getItem(1))
      .show(false)

输出:
+---+----------+------+------+
|uid|event_comb|event1|event2|
+---+----------+------+------+
|c  |[xx, zz]  |xx    |zz    |
|b  |[xx, xx]  |xx    |xx    |
|b  |[xx, yy]  |xx    |yy    |
|b  |[xx, zz]  |xx    |zz    |
|b  |[xx, yy]  |xx    |yy    |
|b  |[xx, zz]  |xx    |zz    |
|b  |[yy, zz]  |yy    |zz    |
|a  |[xx, yy]  |xx    |yy    |
+---+----------+------+------+

关于arrays - 将 Array[String] 的 Spark 列拆分为 String 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48701289/

相关文章:

C++ 气泡数组赋值 - 添加标记以显示变化

java - 按空格分割字符串

javascript - 将字符串转换为int数组

apache-spark - 为什么 SparkContext 会随机关闭,如何从 Zeppelin 重新启动?

apache-spark - 如何从本地运行的 Spark Shell 连接到 Spark EMR

hadoop - hdfs:在sparkR shell中读取Parquetfile时没有此类文件或目录错误

Java:增强的 for 循环,数组大小未知

c++ - 指针数组的段错误

c++ - 边界未知的数组

php - 寻找一种方法来检查一个词是否可以发音