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



我有一个用逗号分隔的csv,在线存储(https : //xxx . com/xx/xx.csv)。我可以这样得到:

import scala.io.Source

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

现在我想把stringCsv转换成一个没有头的Spark DataFrame。

我猜Source是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(下注册

最新更新