我们可以使用Spark-SQL或Scala来检查一个Spark数据框中的每一列是否都包含某个字符串(例如"Y")吗?
我尝试过以下方法,但是不认为它正常工作。
谢谢,Sai
我尝试过以下方法,但是不认为它正常工作。
df.select(df.col("*")).filter("'*' =='Y'")
谢谢,Sai
df.select(df.col("*")).filter("'*' =='Y'")
//Get all columns
val columns: Array[String] = df.columns
//For each column, keep the rows with 'Y'
val seqDfs: Seq[DataFrame] = columns.map(name => df.filter(s"$name == 'Y'"))
//Union all the dataframes together into one final dataframe
val output: DataFrame = seqDfs.reduceRight(_ union _)
val columnNames: Array[String] = df.columns
然后在循环中添加所有的过滤器
var filteredDf = df.select(join5.col("*"))
for(name <- columnNames) {
filteredDf = filteredDf.filter(s"$name =='Y'")
}
或者你可以使用同样的方法创建一个SQL查询
cols = [col(c) == lit(1) for c in patients.columns]
query = cols[0]
for c in cols[1:]:
query |= c
df.filter(query).show()
这段话有点啰嗦,但很清楚地说明了正在发生的事情。更优雅的版本应该是:
res = df.filter(reduce(lambda x, y: x | y, (col(c) == lit(1) for c in cols)))
res.show()