df.map(row=>{
// here I want to see if the downloadUrl is null
// do something
// else if the title is null
// do something
// else
// create a new dataframe df1 with a new column "allowed" with the value set to 1
// push df1 to API
不知道你说的是什么意思 如果title/downloadUrl为空,则做一些事情
但如果你想要一个新的数据框架,其中只有downloadUrl和title两行不为空。请尝试使用这个数据集方法
case class MyObject(id:Int, downloadUrl: String, title: String)
val df = spark.read.json("C:\\filepath\\file.json").as[MyObject]
val df1 = df.filter(o => o.downloadUrl =! null && o.title != null)
另一种方法是使用下面的过滤器函数
val df1 = df.filter(row=>{
val downloadUrl = row.getAs[String]("downloadUrl")
val title = row.getAs[String]("title")
// here I want to see if the downloadUrl is null
// do something
// else if the title is null
// do something
// else
// create a new dataframe df1 with a new column "allowed" with the value set to 1
return title != null && downloadUrl != null
最后,如果你想把到达的行推送给外部API,使用foreach each来代替。然后使用谓词来确定该行是否应该被推送。
df.foreach(row=>{
val downloadUrl = row.getAs[String]("downloadUrl")
val title = row.getAs[String]("title")
// here I want to see if the downloadUrl is null
// do something
// else if the title is null
// do something
// else
// create a new dataframe df1 with a new column "allowed" with the value set to 1
if (title != null && downloadUrl != null){
如果你不打算在map方法中使用外部scala库,最好是使用数据框API。这样会快得多,而且Spark可以对其进行优化。