将Spark DataFrame 转换为字符串数组

11

请问有人能告诉我在Scala中如何将Spark DataFrame转换为Array [String]吗?

我尝试使用以下代码:

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

上述代码片段返回的是一个 Array[Row] 而不是 Array[String]


2
.map { 行 => 行.toString() } - OneCricketeer
谢谢您的回复。这很有效。您能告诉我如果我们使用.map { row => row.toString() .mkString(",")},在打印输出时是否可以消除方括号 "[" 和 "]"? - Bharath
mkString可以从数组中生成一个字符串...这是Scala的所有知识。你如何在Java或Python中将数组转换为字符串?我的观点是,你的问题/问题完全不涉及Spark。 - OneCricketeer
4个回答

14

这应该能解决问题:

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

我们如何解决“columns”生成“无法解析符号”编译问题的情况? - user1485864

5

将DataFrame转换为Array[String]

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

您也可以使用以下内容
data.collect.map(row=>row.getString(0)) 

如果你有更多的列,那么使用最后一列是比较好的。
 data.rdd.map(row=>row.getString(0)).collect

1
你可以将 ".map(.toSeq).flatten" 替换为 ".flatMap(.toSeq)"。 - Max.Futerman

1
如果您计划逐行读取数据集,则可以使用数据集迭代器:
 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(",");    
}

0
答案由用户名为 cricket_007 的用户提供。 您可以使用以下内容将 Array[Row] 转换为 Array[String]:
x =df.select(columns.head, columns.tail: _*).collect().map { row => row.toString() }

谢谢,Bharath


collect()在DataFrame上通常不是您使用它的方式。相反,您应该使用show() - OneCricketeer
你好,cricket_007。在你想要给show赋值的情况下,我认为使用show并没有什么用处。 - Bharath
不是我的观点...将数据框或RDD收集到Scala数据类型中会成为驱动程序进程的瓶颈。如果您只想显示所选输出,则可以在不进行收集的情况下显示它。 - OneCricketeer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接