spark中的collect操作是将远程数据通过网络传输到本地,如果数据量特别大的话,会造成很大的网络压力,更为严重的问题是会造成driver端的内存溢出。
foreach是依次遍历远程集群上的RDD中的元素。collect()和foreach,二者的区别有点类似于Python中的range函数和xrange函数。
code1
tb = hiveContext.sql("select * from tb")
type(tb) 是一个pyspark.sql.dataframe.DataFrame
type(tb.columns)是一个list;
code2
tb1 = hiveContext.sql("select * from tb1").collect()
type(tb1)变成了一个list;
变成一个list之后,可以采用循环的方式去遍历其中的每一个数据。
code3
tb2 = hiveContext.sql("select * from tb2").toPandas()
type(tb2)变成了一个pandas.core.frame.DataFrame
type(tb2.columns)变成了一个pandas.indexes.base.Index
type(tb2.index)变成了一个pandas.indexes.range.RangeIndex
完。