【问题标题】:Convert spark dataframe to Array[String]将火花数据帧转换为数组 [字符串]
【发布时间】:2018-02-18 11:16:57
【问题描述】:

谁能告诉我如何将 Spark 数据帧转换为 Scala 中的 Array[String]。

我用过以下的。

x =df.select(columns.head, columns.tail: _*).collect()

上面的 sn-p 给了我一个 Array[Row] 而不是 Array[String]

【问题讨论】:

  • .map { row => row.toString() }??
  • 感谢您的回复。这样就行了。你能告诉我,如果我们使用.map { row => row.toString() .mkString(",")} 打印出来时消除括号“[”和“]”。
  • mkString 从一个数组中创建一个字符串...这是所有 Scala 知识。在 Java 或 Python 中,如何使数组成为一种刺痛?我的意思是,您的问题/问题完全不在 Spark 范围内

标签: scala apache-spark spark-dataframe


【解决方案1】:

答案由名为 cricket_007 的用户提供。 您可以使用以下方法将 Array[Row] 转换为 Array[String] :

x =df.select(columns.head, columns.tail: _*).collect().map { row => row.toString() }

谢谢, 巴拉特

【讨论】:

  • DataFrame 上的 collect() 通常不是您使用它的方式。相反,你show()
  • 你好 cricket_007,当你想给它分配一个变量时,我不认为 show 在这种情况下有用。
  • 不是我的意思... 将数据帧或 RDD 收集到 Scala 数据类型成为驱动程序进程的瓶颈。如果您只想显示输出,请选择,然后在没有集合的情况下显示它
【解决方案2】:

这应该可以解决问题:

df.select(columns: _*).collect.map(_.toSeq)

【讨论】:

  • 我们如何解决columns 正在生成Cannot resolve symbol 编译问题?
【解决方案3】:

数据帧到数组[字符串]

data.collect.map(_.toSeq).flatten

你也可以使用下面的

data.collect.map(row=>row.getString(0)) 

如果你有更多的列,那么最好使用最后一列

 data.rdd.map(row=>row.getString(0)).collect

【讨论】:

  • 您可以将 .map(.toSeq).flatten 替换为 .flatMap(.toSeq)
【解决方案4】:

如果您打算逐行读取数据集,则可以在数据集上使用迭代器:

 Dataset<Row>csv=session.read().format("csv").option("sep",",").option("inferSchema",true).option("escape, "\"").option("header", true).option("multiline",true).load(users/abc/....);

for(Iterator<Row> iter = csv.toLocalIterator(); iter.hasNext();) {
    String[] item = ((iter.next()).toString().split(",");    
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2018-01-02
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    • 2019-10-28
    相关资源
    最近更新 更多