使用scala在sql表中加载csv文件

时间:2017-08-07 11:03:32

标签: scala apache-spark

我有一个任务是读取csv文件并将csv文件加载到sql表但我不确定我的代码并面对“没有合适的驱动程序错误”并尝试使用新驱动程序。

export class MyDateAdapter extends NativeDateAdapter {


  // change first day of the week to Monday(1)
  getFirstDayOfWeek(): number {
    return 1;
  }

  parse(value: any): Date | null {

    // english format
    if ((typeof value === 'string') && (value.indexOf('/') > -1)) {
      const str = value.split('/');
      if (str.length < 2 || isNaN(+str[0]) || isNaN(+str[1]) || isNaN(+str[2])) {
        return null;
      }
      return new Date(Number(str[2]), Number(str[0]) - 1, Number(str[1]), 12);
    }

    // polish format
    if ((typeof value === 'string') && (value.indexOf('.') > -1)) {
      const str = value.split('.');
      if (str.length < 2 || isNaN(+str[0]) || isNaN(+str[1]) || isNaN(+str[2])) {
        return null;
      }

      return new Date(Number(str[2]), Number(str[1]) - 1, Number(str[0]), 12);
    }

    const timestamp = typeof value === 'number' ? value : Date.parse(value);
    return isNaN(timestamp) ? null : new Date(timestamp);
  }

 }

任何帮助都非常感谢。

2 个答案:

答案 0 :(得分:0)

您也可以在选项中添加相应的驱动程序,例如 .option(&#34; driver&#34;,&#34; org.postgresql.Driver&#34;) 要么 .option(&#34; driver&#34;,&#34; com.mysql.jdbc.Driver&#34;)

答案 1 :(得分:0)

我希望以下答案对您有所帮助,并尝试一下,以免出现任何错误

def main(args: Array[String]): Unit = {
 val conf = new SparkConf().setAppName("Testing Transpose").setMaster("local[*]").set("spark.sql.crossJoin.enabled","true")
 val sc = new SparkContext(conf)
 val sparksession = SparkSession.builder().config("spark.sql.warehouse.dir","file:///c://tmp/spark-warehouse").getOrCreate()

 val sqlContext = new SQLContext(sc)
 import sqlContext.implicits._

 val df = sparksession.read.format("com.databricks.spark.csv").option("header", "true").load(Path)

 val prop : java.util.Properties = new Properties()
 prop.setProperty("user","(temp_User)")
 prop.setProperty("password","(temp_password)")

 df
  .write
  .option("driver","com.microsoft.sqlserver.jdbc.SQLServerDriver")
  .mode("append")
  .jdbc("jdbc:sqlserver://(database_ip):(database_port_to_access)","(table_name)",prop)

sparksession.stop()
}

如果您想使用databricks.csv,请包含此依赖项,否则您可以替换它 val df = sparkSession.read.option("header","true").csv("src/main/resources/sales.csv")

这需要包含在 build.sbt libraryDependencies += "com.databricks" % "spark-csv_2.10" % "0.1"

如果您的文件没有标题,那么您可以像下面这样提供标题

import sqlContext.implicits._
    df.toDF("column_name_1","column_name_2",.....)

注意:列名称的数量必须与数据框中的列数相似,还有一点要注意,您需要将标题选项更改为false,如下所示

sparksession.read.format("com.databricks.spark.csv").option("header", "false").load(Path)