apache-spark - Pyspark 中的 JSON 文件解析

标签 apache-spark dataframe pyspark apache-spark-sql pyspark-sql

我对 Pyspark 很陌生。我尝试使用以下代码解析 JSON 文件

from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)
df = sqlContext.read.json("file:///home/malwarehunter/Downloads/122116-path.json")
df.printSchema()

输出如下。

root |-- _corrupt_record: string (nullable = true)


df.show()

输出看起来像这样
+--------------------+
|     _corrupt_record|
+--------------------+
|                   {|
|  "time1":"2...|
|  "time2":"201...|
|    "step":0.5,|
|          "xyz":[|
|                   {|
|      "student":"00010...|
|      "attr...|
|        [ -2.52, ...|
|        [ -2.3, -...|
|        [ -1.97, ...|
|        [ -1.27, ...|
|        [ -1.03, ...|
|        [ -0.8, -...|
|        [ -0.13, ...|
|        [ 0.09, -...|
|        [ 0.54, -...|
|        [  1.1, -...|
|        [ 1.34, 0...|
|        [ 1.64, 0...|
+--------------------+
only showing top 20 rows

Json 文件看起来像这样。
{
  "time1":"2016-12-16T00:00:00.000",

  "time2":"2016-12-16T23:59:59.000",

  "step":0.5,

   "xyz":[

    {
     "student":"0001025D0007F5DB",
      "attr":[
    [ -2.52, -1.17 ],
    [ -2.3, -1.15 ],
    [ -1.97, -1.19 ],
    [ 10.16, 4.08 ],
    [ 10.23, 4.87 ],
    [ 9.96, 5.09 ] ]
},
{
  "student":"0001025D0007F5DC",
  "attr":[
    [ -2.58, -0.99 ],
    [ 10.12, 3.89 ],
    [ 10.27, 4.59 ],
    [ 10.05, 5.02 ] ]
}
]}

你能帮我解析这个并创建一个这样的数据框吗?

Output Dataframe required

最佳答案

Spark >= 2.2 :

您可以使用 multiLine JSON 阅读器的参数:

spark.read.json(path_to_input, multiLine=True)

Spark < 2.2

有几乎通用但相当昂贵的解决方案,可用于读取多行 JSON 文件:
  • 使用 SparkContex.wholeTextFiles 读取数据.
  • 删除键(文件名)。
  • 将结果传递给 DataFrameReader.json .

  • 只要您的数据没有其他问题,它就可以解决问题:
    spark.read.json(sc.wholeTextFiles(path_to_input).values())
    

    关于apache-spark - Pyspark 中的 JSON 文件解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41543903/

    相关文章:

    python - 验证 pyspark dataframe 中列的数据类型

    python - PySpark reducebykey 与字典

    apache-spark - 随着分区的增长,spark parquet 写入变慢

    apache-spark - spark-sql 表或 View 未找到错误

    python - 从 dataframe pandas python 中删除一个例子

    python - 仅检查数据框中是否存在列值

    python - 有没有办法在pyspark中设置mysql的sql_mode?

    python - 'HiveContext' 对象没有属性 'jsonRDD' Spark 2.1.1

    scala - yarn 上的 Spark 提交没有将 jar 分发到 nm-local-dir

    python - 构建带有行的 Pandas 数据框,条件是它们不存在于另一个数据框python中