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

Posted

技术标签:

【中文标题】使用scala在sql表中加载csv文件【英文标题】:load csv file in sql table using scala 【发布时间】: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 文件。 【参考方案1】:

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

【讨论】:

请参考之前的帖子,***.com/questions/29552799/…【参考方案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.sbtlibraryDependencies += "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 请告知它是否帮助您

以上是关于使用scala在sql表中加载csv文件的主要内容,如果未能解决你的问题,请参考以下文章

使用数据框在 Pandas 中加载 csv 文件

在电源查询中加载 CSV 时如何处理多个引号?

在 PIG 中加载 CSV 文件

无法使用熊猫在 python3 中加载 csv 文件

在 Core Data 中加载 csv 文件

我想从我的 CSV 文件中加载特定的列数据(MySQL 8.0)