Spark Python的一些问题2

继续总结下使用spark的一些问题.

dataframe的一些使用

问题: 如何查看dataframe中的内容?

直接调用df.show()方法

问题: dataframe如何转成rdd?

直接使用row = df.rdd. 注意, 这里的rdd是pyspark.sql.Row类型, 属性访问使用row.xxx.

另外rdd转成dataframe可以用pyspark.sql.SQLContext.createDataFrame方法: df = sqlContext.createDataFrame(rdd)

spark结果保存

spark中的rdd或者dataframe可以保存成文件, 举个例子:

1
2
## 也可用file:///tmp/cool.json保存到本地, 这里保存到hdfs中
df.write.save("cool.json", format="json", mode='overwrite')

如果去查看对应的文件会发现cool.json是个文件夹:

1
2
3
4
$ hdfs dfs -ls hdfs:///user/root/cool.json

hdfs:///user/root/cool.json/_SUCCESS
hdfs:///user/root/cool.json/part-r-00000-2b480f22-9f96-49dc-892f-b597a76e35fb

为什么会这样子呢? 在这里找到了答案. 简单说数据在落盘时会写多份(mr机制). 如果是在spark中读取数据直接用文件名cool.json. 但是在外部使用的时候肯定还是会想要单个文件吧? 我们可以使用hdfsgetmerge指令来将对应内容导出成一个文件:

1
2
## 导出为cool.json
hdfs dfs -getmerge hdfs:///user/root/cool.json ./cool.json

同pandas配合

我们将spark的数据导出成json文件有什么好处呢? 主要是为了复用与做进一步分析;)

例如我们可以使用pandas来对生成的json文件进行进一步的分析. 题外话, python结合pandas有点类似r, 这里有个简单的对比.

这里有个小问题: spark中输出的json文件并非正常的json, 在pandas中使用需要稍微处理一下:

1
2
3
import pandas as pd

df = pd.read_json('file:///tmp/cool.json', lines=True)

开始分析吧;)

Comments