我选择的列是一个数据框。我想将它转换为一个字符串,这样它就可以用来构建cosmos DB动态查询。数据帧上关于查询流来源的collect()函数必须用writeStream.start()执行;;
val DF = AppointmentDF
.select("*")
.filter($"xyz" === "abc")
DF.createOrReplaceTempView("MyTable")
val column1DF = spark.sql("SELECT column1 FROM MyTable")
// This is not getting resolved
val sql="select c.abc from c where c.column = \"" + String.valueOf(column1DF) + "\""
println(sql)
Error:
org.apache.spark.sql.AnalysisException: cannot resolve '`column1DF`' given input columns: []; line 1 pos 12;
DF.collect().foreach { row =>
println(row.mkString(","))
}
Error:
org.apache.spark.sql.AnalysisException: Queries with streaming sources must
be executed with writeStream.start();;发布于 2020-05-16 19:49:59
数据帧是一种分布式数据结构,而不是位于可以打印的机器中的结构。值DF和column1DF将会是精确的数据帧。要将查询的所有数据带到驱动程序节点,您可以使用dataframe方法collect,并从返回的行数组中提取您的值。如果您将千兆字节的数据带到驱动程序节点的内存中,收集可能是有害的。
发布于 2020-05-16 22:01:56
您可以使用collect并使用head获取DataFrame的第一行
val column1DF = spark.sql("SELECT column1 FROM MyTable").collect().head.getAs[String](0)
val sql="select c.abc from c where c.column = \"" + column1DF + "\""https://stackoverflow.com/questions/61828805
复制相似问题