假设我有以下几列:
EMP_ID, EMP_NAME, EMP_CONTACT
1, SIDDHESH, 544949461
现在我想验证数据是否与列名模式同步。对于EMP_NAME
,该列中的数据应该仅为string
。我在引用此链接后尝试了下面的代码,但它在我的代码的最后一行显示错误。
package com.sample
import org.apache.spark.SparkContext
import org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.Row
class sample1 {
val spark = SparkSession.builder().master("local[*]").getOrCreate()
val data = spark.read.format("csv").option("header", "true").load("C:/Users/siddheshk2/Desktop/words.txt")
val originalSchema = data.schema
def validateColumns(row: Row): Row = {
val emp_id = row.getAs[String]("EMP_ID")
val emp_name = row.getAs[String]("EMP_NAME")
val emp_contact = row.getAs[String]("EMP_CONTACT")
// do checking here and populate (err_col,err_val,err_desc) with values if applicable
Row.merge(row)
}
val validateDF = data.map { row => validateColumns(row) }
}
因此,它不接受代码的最后一行。映射{行=
我输入了一条无效记录(第三条),如下所示:
EMP_ID,EMP_NAME,EMP_CONTACT
1,SIDDHESH,99009809
2,asdadsa, null
sidh,sidjh,1232
在本例中,我已经为id列输入了一个字符串值(应该是一个数字),因此在检查列架构及其数据后,它应该抛出一个错误,说明记录与列架构不匹配。
行类有一个模式属性。您可以通过遍历列并比较它们来使用它。为此,您可以使用==
运算符或使用此处描述的模式比较方法之一。
然后验证方法可以看起来像下一个:
def isValid(row: Row): Boolean = originalSchema == row.schema
您刚刚错过了将数据帧转换为rdd以应用<代码>。映射操作请尝试以下操作:
import org.apache.spark.sql.Row
val validateDF = data.rdd.map { row => validateColumns(row) }
如果要将其转换回DataFrame,只需使用sparkSession即可:
val newSchema = // specify the schema of the new dataframe
val updatedDF = spark.createDataFrame(validateDF, newSchema)
如果我们有数据集: 如何创建y轴表示“a”,x轴表示“b”的相关矩阵? 目的是查看两个数据集的匹配列之间的相关性,如下所示:
问题内容: 我正在从可能更改的视图中查询数据。在执行操作之前,我需要知道该列是否存在。我发现可以查询这样的元数据,以便在从该列请求数据之前查看是否存在该列。 有没有一种更简单的检查列是否存在的方法? 编辑:它必须是数据库不可知的。这就是为什么我引用而不是数据库的原因。 问题答案: 通用JDBC API并不是简单的方法(至少我不知道,或者找不到……我在自己的工具集中有完全相同的代码。) (您的代码不
我尝试将一个字符串作为输入(大约5-7个字符),遍历每个字符并检查它是否与数组中的字符匹配。例如: 上述观点显然是错误的。然而,我希望它能说明我正在努力做什么。例如,如果字符串是“H3llo”,我想检查字符串中的每个字符,看看它是否与数组中的任何项匹配。如果是这样,我希望将索引存储为int。 这可能不是一种有效的方法,但这是我目前学习水平所能想到的唯一方法。
我有一个包含有4个参数(x,y,iD和myType)的对象的ArrayList。我想验证这个ArrayList中是否有具有特定坐标的对象,独立于它们的iD和myType参数。我想使用但当对象只有一个参数时。 以下是全部代码: 例如,如果我想验证是否有一个具有坐标(3.5,4.5)的对象,我应该如何继续?有没有简单的方法? 谢谢你的帮忙
问题内容: 我正在尝试制作简单的Java代码,以检查MySQL DB中是否存在表和/或列。我应该使用Java代码进行检查还是生成一个SQL查询字符串并执行以进行检查? 编辑- @ aleroot- 我尝试使用您的代码,如下所示。运行以下代码时,我看不到任何表或列。我只看到这个 我的数据库有很多数据库,表和列。我不知道为什么该程序可以正常工作。 问题答案: 要检查表是否存在,可以按以下方式使用Dat
开始时,所有标志均为0。我使用while循环来检查是否至少有一个元素的标志为0: 如果返回,那么我将继续处理我的列表: 实际上,我想在迭代my_list时移除元素,但不允许在迭代时移除项。 由于我无法在迭代时删除元素,所以我发明了这些标志。但是包含许多项,循环在每个循环中读取所有项,这会消耗大量时间!你有什么建议吗?