Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 如何在Spark中检测CSV文件模式的更改_Apache Spark_Pyspark_Apache Spark Sql_Spark Csv - Fatal编程技术网

Apache spark 如何在Spark中检测CSV文件模式的更改

Apache spark 如何在Spark中检测CSV文件模式的更改,apache-spark,pyspark,apache-spark-sql,spark-csv,Apache Spark,Pyspark,Apache Spark Sql,Spark Csv,如果传入的CSV文件中的模式发生了更改,我们如何在spark中处理这个问题 假设在第一天, 我得到了一个csv文件,其模式和数据如下所示 FirstName LastName Age Sagar Patro 26 Akash Nayak 22 Amar Kumar 18 第10天, 我传入的CSV文件架构发生了更改,如下所示 FirstName LastName Mobile Age Sagar Patro 898415947

如果传入的CSV文件中的模式发生了更改,我们如何在spark中处理这个问题

假设在第一天, 我得到了一个csv文件,其模式和数据如下所示

FirstName LastName Age
Sagar     Patro    26
Akash     Nayak    22
Amar      Kumar    18
第10天, 我传入的CSV文件架构发生了更改,如下所示

FirstName LastName Mobile     Age 
Sagar     Patro    8984159475 26  
Akash     Nayak    9040988503 22  
Amar      Kumar    9337856871 18  
我的第一项要求,

我想知道,传入的CSV文件的模式是否有任何更改

我的第二项要求,

我想忽略那些新添加的列,继续使用我以前的模式,即第1天的模式数据

我的第三项要求,


如果传入的csv数据(即第10天模式)中的模式发生更改,我还希望自动添加新模式

您需要找到模式之间的差异,您可以找到关于它的广泛讨论
import org.apache.spark.sql.DataFrame

object SchemaDiff {

  def main(args: Array[String]): Unit = {
    // Just because its a simple CSV not considering column data type changes
    val df1 : DataFrame = null // Dataframe for yesterday's data
    val df2 : DataFrame = null // Dataframe for today's data
    val deltaColumnNames = df2.columns.diff(df1.columns)
    val ignoreSchemaChange = true
    if(!deltaColumnNames.isEmpty) {
      println("Schema change")
    }
    val resultDf = if(ignoreSchemaChange) {
      df2.toDF(df1.columns: _*) // Maintain yesterday's schema
    } else {
      df2  // Use updated schema
    }

  }
}