使用scala从csv(url源)创建Dataframe

vcirk6k6  于 2021-05-17  发布在  Spark
关注(0)|答案(1)|浏览(576)

我有一个用逗号分隔的csv存储在网上 (https : // . com/xx/xx.csv) . 我可以这样做:
import scala.io.Source val stringCsv = Source.fromURL(url,"UTF-8").mkString 现在我要皈依 stringCsv 变成一个没有标题的sparkDataframe。

neekobn8

neekobn81#

我猜源代码是scala.io.source,它将返回一个迭代器。您只需从中取出lineiterator,跳过第一行,然后将其转换为Dataframe。
其工作原理如下:

val raw = Source.fromURL(url,"UTF-8")

// skip the header
raw.next

// convert to DF
import spark.implicits._
val df = raw.toList.toDF

// here you end up with a dataframe of strings (So a row with a single column).

但对于更大的文件来说,这将是相当低效的。星火之路是:

import org.apache.spark.SparkFiles
spark.sparkContext.addFile(spark.sparkContext.addFile(url)) 
val df = spark.read.format("csv")
  .option("sep", ";")
  .option("inferSchema", "true")
  .option("header", "true")
  .load("file://"+SparkFiles.get("yourfile.csv"))

在那里你可以选择定义你的输入是否有一个标题(除了很多其他的东西)。诀窍可能是 spark.sparkContext.addFile(url) 在文件名下注册你的文件,而不是在完整路径下注册(比如url)https://raw.githubusercontent.com/ibm/knative-serverless/master/src/destination/cities.csv 将根据 cities.csv )

相关问题