【问题标题】:load csv file in sql table using scala使用scala在sql表中加载csv文件
【发布时间】:2017-08-07 11:03:31
【问题描述】:

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

val DBURL= "jdbc:sqlserver://servername:port;DatabaseName=DBname"  
val srcfile=spark.read.text("filename")
val test =srcfile.write.format("jdbc")
          .option("url", DBURL)
          .option("dbtable", "tablename")
          .option("user", "username")
          .option("password", "password")
          .save()

非常感谢任何帮助。

【问题讨论】:

  • 您是否在内置管理器(如 maven 或 sbt)中包含依赖项?
  • 我们没有使用 maven 和 sbt。只是我们必须从 hdfs 读取文件并将其插入到 sql 表中
  • 你下载了jdbc连接器了吗?
  • 是的,这个可能是最新的 jar"mysql-connector-java-5.0.8-bin.jar" 使用这个我可以连接表但无法加载 csv 文件。

标签: scala apache-spark


【解决方案1】:

您也可以在选项中添加相应的驱动程序,例如 .option ("驱动程序","org.postgresql.Driver") 或者 .option("driver", "com.mysql.jdbc.Driver")

【讨论】:

【解决方案2】:

我希望下面的答案对你有帮助,并且已经尝试过了,所以它不能有任何错误

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",.....)

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

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

【讨论】:

  • 但我的数据文件没有标题。没有标题显示无效列名等错误
  • 我在答案末尾添加了一些注释/cmets,请仔细阅读,您可能会解决您的问题。如果需要,请随时 ping
  • 请告知它是否帮助您
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-30
  • 2021-08-10
  • 2019-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多