【问题标题】:How to use Spark-Scala to download a CSV file from the web?如何使用 Spark-Scala 从网上下载 CSV 文件?
【发布时间】:2020-03-28 05:56:39
【问题描述】:

世界,

如何使用 Spark-Scala 从网上下载 CSV 文件并将文件加载到 spark-csv DataFrame 中?

目前我依靠 shell 命令中的 curl 来获取我的 CSV 文件。

这是我要增强的语法:

/* fb_csv.scala
This script should load FB prices from Yahoo.

Demo:
spark-shell -i fb_csv.scala
*/

// I should get prices:
import sys.process._
"/usr/bin/curl -o /tmp/fb.csv http://ichart.finance.yahoo.com/table.csv?s=FB"!

import org.apache.spark.sql.SQLContext

val sqlContext = new SQLContext(sc)

val fb_df = sqlContext.read.format("com.databricks.spark.csv").option("header","true").option("inferSchema","true").load("/tmp/fb.csv")

fb_df.head(9)

我想增强上面的脚本,使它成为纯 Scala,里面没有 shell 语法。

【问题讨论】:

  • 我认为您最好的方法是读取 spark 代码之外的 URI 内容并将生成的序列转换为 DataFrame。
  • @TheArchetypalPaul 我会将其解读为火花内的流。你怎么看?
  • 我查了一下,但找不到更多细节 - 你有关于如何从 URL 执行此操作的指针吗?还有,这些是单只股票的价格,我相信数据集不会很大……
  • @TheArchetypalPaul 我没有尝试过这个解决方案是否真的可扩展,但我正在考虑这样的事情:sc.parallelize(scala.io.Source.fromURL("http://ichart.finance.yahoo.com/table.csv?s=FB").getLines.toStream)
  • 不要认为流在那里添加任何东西。我以为你的意思是火花流

标签: scala csv apache-spark


【解决方案1】:
val content = scala.io.Source.fromURL("http://ichart.finance.yahoo.com/table.csv?s=FB").mkString

val list = content.split("\n").filter(_ != "")

val rdd = sc.parallelize(list)

val df = rdd.toDF

【讨论】:

    【解决方案2】:

    Process CSV from REST API into Spark找到更好的答案

    给你:

    import scala.io.Source._
    import org.apache.spark.sql.{Dataset, SparkSession}
    
    var res = fromURL(url).mkString.stripMargin.lines.toList
    val csvData: Dataset[String] = spark.sparkContext.parallelize(res).toDS()
    
    val frame = spark.read.option("header", true).option("inferSchema",true).csv(csvData)
    frame.printSchema()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-04
      • 1970-01-01
      • 2019-01-15
      • 1970-01-01
      • 1970-01-01
      • 2017-07-14
      • 2018-04-26
      • 2015-11-30
      相关资源
      最近更新 更多