python - Pyspark JSON 对象或文件到 RDD

标签 python json pyspark rdd

我是 PySpark 的新手,我有一个从 this link 获得的 AskReddit json 文件.我正在尝试创建一个 RDD,然后我希望它执行诸如 map 和平面图之类的操作。我被建议以 jsonlines 格式获取 json,但尽管使用 pip 安装 jsonlines,但我无法在 PySpark 笔记本中导入包。以下是我尝试在 json 中阅读的内容。

In [10]: import json

         data = json.load(open("AskReddit.json", "r"))
         jsonrdd = sc.parallelize(data)
         jsonrdd.take(5) 

Out[11]: [u'kind', u'data']

我还尝试执行以下操作,它在执行 jsonrdd.take(1) 后为我提供了 json 文件的全部内容。

In [6]: jsonrdd = sc.wholeTextFiles("*.json")
        jsonrdd.take(1)

但是,我想将每个 json 对象作为 rdd 中的一行。我该怎么做?

最佳答案

您可以使用 SparkSQL 的 read.json 读取文件,如 -

jdf = spark.read.json("path/to/AskReddit.json")

并执行所有类型的 sql 类型的操作,甚至是 rdd 类型的操作。但是 json 结构确实是嵌套的,没有固定的列,可以用 explode 之类的东西派生

Json Structure 你最好使用 read.json 并使用数据框 -

jdf\
.withColumn('after',jdf.data.after)\
.withColumn('before',jdf.data.before)\
.withColumn('modhash',jdf.data.modhash)\
.withColumn('NestedKind',explode(jdf.data.children.kind))\
.withColumn('subreddit',explode(jdf.data.children.data.subreddit))\
.withColumn('clicked',explode(jdf.data.children.data.clicked))\
.show()

+--------------------+-------+---------+------+--------------------+----------+---------+-------+
|                data|   kind|    after|before|             modhash|NestedKind|subreddit|clicked|
+--------------------+-------+---------+------+--------------------+----------+---------+-------+
|[t3_66qv3r,null,W...|Listing|t3_66qv3r|  null|3r7ao0m7qiadae13d...|        t3|AskReddit|  false|
|[t3_66qv3r,null,W...|Listing|t3_66qv3r|  null|3r7ao0m7qiadae13d...|        t3|AskReddit|  false|

关于python - Pyspark JSON 对象或文件到 RDD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43551670/

相关文章:

python - django 中网站 "root"的正则表达式是什么?

java - 使用 GSON 生成链接而不是整个对象树的序列化

javascript - 查看 json 并单击该 json 中的 links.json 并将其替换为当前的 json View

python - 创建距中心距离的列

python - Django 1.7 出现 ImportError,无法导入名称模式

python - 在 jupyter 中以 for 循环播放音频

java - 在 XML 免费项目中使用 spring 在 404 上返回 JSON

hadoop - 有什么方法可以通过一个pyspark脚本从10个不同的模式中提取数据?

python - 为什么我从 date_format() PySpark 函数得到空结果?

python - subprocess.Popen shell=True to shell=False