scala - 将 Spark DataFrame 值存储在 scala 变量中
问题描述
我需要检查表中的重复文件名,如果文件数为 0,那么我需要使用sparkSql
. 我写了下面的代码。
val s1=spark.sql("select count(filename) from mytable where filename='myfile.csv'") //giving '2'
s1: org.apache.spark.sql.DataFrame = [count(filename): bigint]
s1.show //giving 2 as output
//s1 给了我表中的文件计数,然后我需要使用 if 语句比较这个计数值。我正在使用下面的代码。
val s2=s1.count //not working always giving 1
val s2=s1.head.count() // error: value count is not a member of org.apache.spark.sql.Row
val s2=s1.size //value size is not a member of Unit
if(s1>0){ //code } //value > is not a member of org.apache.spark.sql.DataFrame
有人可以给我一个提示我应该怎么做。我怎样才能得到数据框值并可以用作变量来检查条件。IE
if(value of s1(i.e.2)>0){
//my code
}
解决方案
您需要提取值本身。Count 将返回 df 中的行数,即只有一行。
因此,您可以保留原始查询并使用 first 和 getInt 方法提取值
val s1 = spark.sql("select count(filename) from mytable where filename='myfile.csv'")`
val valueToCompare = s1.first().getInt(0)
接着:
if(valueToCompare>0){
//my code
}
另一种选择是在查询之外执行计数,然后计数将为您提供所需的值:
val s1 = spark.sql("select filename from mytable where filename='myfile.csv'")
if(s1.count>0){
//my code
}
我最喜欢第二种选择,但除了我认为它更清楚之外没有其他原因
推荐阅读
- python - 如何清除脚本中正在使用并始终在其上写入的文件?出现奇怪的符号
- python - IDE 在“ latest_questions = Question.objects.order_by('-pub_date')[:10] ”中显示对象关键字错误
- python - 如何从 HTML 页面创建 PNG 图像并使用 Django 将其保存到数据库中?
- c++ - 如何用数组初始化结构数组?
- git - PhpStorm 中的警告
- reactjs - 酶实例()返回 null
- javascript - 拖放上传文件在 Microsoft Edge 上不起作用
- mysql - SQL 根据第二张表中的属性过滤一张表中的产品
- xml - 没有 dtd/xsd 的 XML 元素的默认类型
- javascript - 添加相邻元素时调整/更改 HTML 元素的宽度