【问题标题】:Spark(scala): converting a JSON string to dataframe [duplicate]Spark(scala):将JSON字符串转换为数据框[重复]
【发布时间】:2018-04-14 03:02:22
【问题描述】:

我希望将这个 api 的结果转换成数据帧

val url = api

val result = scala.io.Source.fromURL(url).mkString

val df = spark.read.json(result).toDF()

在上面的代码中,我不能只调用结果。有什么方法可以将结果转换为数据框?

【问题讨论】:

  • 请在结果中提供数据格式。如果每一行都有 json,理想情况下,您需要将每一行转换为案例类等
  • 结果数据:{"data1":52,"data2":54,"data":[{"time":1462680000,"text":"abc"}}
  • 我没有使用 sqlContext.. 还有其他方法吗

标签: scala apache-spark spark-dataframe


【解决方案1】:

您可以通过多种方式在 spark 中创建 dataFrame。

示例 1:

import org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession

val conf = new SparkConf()
  .setMaster("local[2]")
  .setAppName("SomeApp")

val spark = SparkSession
  .builder()
  .appName("basic example")
  .config(conf)
  .getOrCreate()

val df = spark.read.json("/Users/user/Sources/basesample/data.json")

df.show()

spark.close()

它来自标准文档: https://spark.apache.org/docs/latest/sql-programming-guide.html

示例 2:这里的代码更多地以手动方式执行此操作。

我使用json4s从json转换->案例类

val sc = new SparkContext(conf)

case class Data(data1:Int, data2:Int)

val json = parse("""{"data1":52,"data2":54}""");

// Convert json string to collection of case classes
val row = json.extract[Data]

val rdd : RDD[Data] = sc.parallelize( Seq(row) )

val sqlContext = new org.apache.spark.sql.SQLContext(sc)

val df = sqlContext.createDataFrame( rdd)

sc.stop()

【讨论】:

    猜你喜欢
    • 2018-10-18
    • 2018-12-14
    • 1970-01-01
    • 2014-02-18
    • 2018-02-26
    • 2017-06-03
    • 1970-01-01
    • 2020-01-25
    • 1970-01-01
    相关资源
    最近更新 更多