我有一个用逗号分隔的csv存储在网上 (https : // . com/xx/xx.csv) . 我可以这样做:import scala.io.Source val stringCsv = Source.fromURL(url,"UTF-8").mkString 现在我要皈依 stringCsv 变成一个没有标题的sparkDataframe。
(https : // . com/xx/xx.csv)
val stringCsv = Source.fromURL(url,"UTF-8").mkString
stringCsv
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 )
spark.sparkContext.addFile(url)
cities.csv
1条答案
按热度按时间neekobn81#
我猜源代码是scala.io.source,它将返回一个迭代器。您只需从中取出lineiterator,跳过第一行,然后将其转换为Dataframe。
其工作原理如下:
但对于更大的文件来说,这将是相当低效的。星火之路是:
在那里你可以选择定义你的输入是否有一个标题(除了很多其他的东西)。诀窍可能是
spark.sparkContext.addFile(url)
在文件名下注册你的文件,而不是在完整路径下注册(比如url)https://raw.githubusercontent.com/ibm/knative-serverless/master/src/destination/cities.csv 将根据cities.csv
)