我有一个用逗号分隔的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
(下注册