【问题标题】:Process CSV from REST API into Spark将 CSV 从 REST API 处理到 Spark
【发布时间】:2017-12-11 04:48:36
【问题描述】:

将 csv 格式的结果从 rest api 直接读取到 spark 中的最佳方法是什么?

基本上有这个,我知道我可以在 scala 中处理并保存到文件,但想在 spark 中处理数据:

val resultCsv = scala.io.Source.fromURL(url).getLines()

【问题讨论】:

  • 您必须先将文件读入内存/磁盘,然后 Spark 才能对其进行任何操作,因此您所拥有的是唯一的选择。是否将其放入 Spark 执行器取决于您
  • 谢谢。我可以将它放入内存而不是磁盘。是否有从返回的 csv 对象到您可以推荐的 RDD/DF 的惯用转换?

标签: scala csv apache-spark


【解决方案1】:

这是可以做到的。

适用于 Spark 2.2.x

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()

为旧版本的 Spark 使用 databricks 库

import scala.io.Source._
import com.databricks.spark.csv.CsvParser

var res = fromURL(url).mkString.stripMargin.lines.toList
val csvData: Dataset[String] = spark.sparkContext.parallelize(res)

val csvParser = new CsvParser()
  .withUseHeader(true)
  .withInferSchema(true)

val frame: DataFrame = csvParser.csvRdd(sqlContext, rdd)
frame.printSchema()

注意:- 我是 Scala 新手,如有任何改进,我们将不胜感激。

参考:here

【讨论】:

  • 如何使用需要身份验证的 REST Web 服务的结果?例如,需要拉取一个 servicenow 表,它有 1000000 条记录。每个对 servicenow 的 api 调用都会返回 1000 个结果。因此,要获取整个数据集,您需要进行多次调用。我正在尝试创建一个datasourcev2,但是在查看之后没有那么多文档。你有什么建议吗?
猜你喜欢
  • 1970-01-01
  • 2020-07-26
  • 2016-09-28
  • 1970-01-01
  • 2017-04-11
  • 1970-01-01
  • 2020-07-30
  • 2017-09-28
  • 1970-01-01
相关资源
最近更新 更多