如果我在读JSON字符串,SQLContext.createDataframe(RDD,StructType)与SQLContext.read()。schema(StructType).json(RDD)之间的区别?

时间:2016-12-07 06:56:01

标签: json scala apache-spark

createDataframe

如果我们提供JSON字符串,

read.schema().json()似乎提供相同的功能?

编辑:

我似乎找到了第三种选择:

[JsonRDD.jsonStringtoRow](https://spark.apache.org/docs/1.3.0/api/java/org/apache/spark/sql/json/JsonRDD.html#jsonStringToRow(org.apache.spark.rdd.RDD,org.apache.spark.sql.types.StructType,java.lang.String))

2 个答案:

答案 0 :(得分:1)

SQLContext.createDataframe(RDD, StructType)这里,第一个参数是字符串的RDD,它不是JSON格式。它需要是Row的RDD。

SQLContext.read().schema(StructType).json(RDD)这里,参数RDD应该是一个json格式的字符串。

答案 1 :(得分:1)

如果您有JSON数据集,则可以使用Scala中的spark.read.json将其加载到数据框中。来自Spark documentation

val df = spark.read.json("examples/src/main/resources/people.json")

// Displays the content of the DataFrame to stdout
df.show()
// +----+-------+
// | age|   name|
// +----+-------+
// |null|Michael|
// |  30|   Andy|
// |  19| Justin|
// +----+-------+
当您的RDD包含createDataFrame(rdd)个对象时,

Row将起作用。 Spark会infer the data types,或者你可以specify the schema(除非你确定你的数据不包含任何特殊的东西,否则我会推荐。)