因为我对spark scala有点陌生,所以我发现很难遍历Dataframe。我的数据框包含两列,一列是 path
另一个是 ingestiontime
. 示例-
现在我想遍历这个Dataframe并使用 Path
以及 ingestiontime
列以准备 Hive
查询并运行它,这样运行的查询-
ALTER TABLE <hiveTableName> ADD PARTITON (ingestiontime=<Ingestiontime_From_the_DataFrame_ingestiontime_column>) LOCATION (<Path_From_the_dataFrames_path_column>)
为了达到这个目的,我用-
allOtherIngestionTime.collect().foreach {
row =>
var prepareHiveQuery = "ALTER TABLE myhiveTable ADD PARTITION (ingestiontime = "+row.mkString("<SomeCustomDelimiter>").split("<SomeCustomDelimiter>")(1)+" LOCATION ( " + row.mkString("<SomeCustomDelimiter>").split("<SomeCustomDelimiter>")(0) + ")"
spark.sql(prepareHiveQuery)
}
但我觉得这可能非常危险,即当我的数据由类似的分隔符组成时。我非常有兴趣找出遍历Dataframe的行/列的其他方法。
2条答案
按热度按时间izj3ouym1#
检查以下代码。
lo8azlld2#
以便访问您的列
path
以及ingestiontime
你可以你row.getString(0)
以及row.getString(1)
.Dataframe
数据集
如果使用数据集而不是Dataframe,则可以使用
row.path
以及row.ingestiontime
以更简单的方式。在任何情况下,都可以使用
foreach
,或map
如果要将内容转换为其他内容。另外,使用
collect()
您正在将所有数据带到驱动程序,但不建议这样做,您可以使用foreach
或者map
没有collect()
如果你想迭代row
菲尔兹,你可以做一个Seq
并迭代: