在scala变量中存储Spark数据帧值
我需要检查表中的重复文件名,如果文件计数为0,则需要使用在scala变量中存储Spark数据帧值,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,我需要检查表中的重复文件名,如果文件计数为0,则需要使用sparkSql在表中加载文件。我写了下面的代码 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 U
sparkSql
在表中加载文件。我写了下面的代码
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
val s1=spark.sql(“从mytable中选择count(filename),其中filename='myfile.csv')//给出'2'
s1:org.apache.spark.sql.DataFrame=[count(文件名):bigint]
s1.show//将2作为输出
//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
有人能给我一个提示我应该怎么做。我怎么才能得到数据帧的值,并可以用它作为变量来检查条件。
i、 e
您需要提取值本身。Count将返回df中的行数,这只是一行 因此,您可以使用first和getInt方法保留原始查询并在查询后提取值
val s1=spark.sql(“从mytable中选择count(filename),其中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
}
我最喜欢第二个选项,但没有其他原因,我认为更清楚的是,您需要提取值本身。Count将返回df中的行数,这只是一行 因此,您可以使用first和getInt方法保留原始查询并在查询后提取值
val s1=spark.sql(“从mytable中选择count(filename),其中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
}
我最喜欢第二个选项,但没有其他原因,我认为它更清楚spark.sql(“从mytable中选择count(filename),其中filename='myfile.csv'”)
返回一个数据帧,您需要提取该行的第一行和第一列。直接过滤数据集并计算Scala中的行数要简单得多:
val s1 = df.filter($"filename" === "myfile.csv").count
if (s1 > 0) {
...
}
其中,df
是与mytable
表相对应的数据集
如果您不是通过注册视图而从其他来源获得表,请使用SparkSession.table()
使用您已有的SparkSession
实例获取数据帧。例如,在Spark shell中,预设变量Spark
保存会话,您将执行以下操作:
val df = spark.table("mytable")
val s1 = df.filter($"filename" === "myfile.csv").count
spark.sql(“从mytable中选择count(filename),其中filename='myfile.csv'”)
返回一个数据帧,您需要提取该行的第一行和第一列。直接过滤数据集并计算Scala中的行数要简单得多:
val s1 = df.filter($"filename" === "myfile.csv").count
if (s1 > 0) {
...
}
其中,df
是与mytable
表相对应的数据集
如果您不是通过注册视图而从其他来源获得表,请使用SparkSession.table()
使用您已有的SparkSession
实例获取数据帧。例如,在Spark shell中,预设变量Spark
保存会话,您将执行以下操作:
val df = spark.table("mytable")
val s1 = df.filter($"filename" === "myfile.csv").count
您可能应该再次阅读SQL中的聚合函数的功能以及数据帧上的
count
功能。您可能应该再次阅读SQL中的聚合函数的功能以及数据帧上的count
功能。