写在前面:如何将Pyspark 和 Pandas结合起来做机器学习和常规的建模分析呢?
Spark处理大数据,Pandas处理小数据。
pyspark中的DataFrame是分布式的,可以用来处理大规模数据的ETL,处理后的数据collect到单机器节点上,然后交给Pandas dataframe来处理。
虽然Panas是单机处理的,但胜在功能工具比较齐全和完善,处理下小数据的分析和操作还是足够的。
一、基本ETL常规操作
1、从Pandas DataFrame创建 Spark DataFrame
import pandas as pd
pandas_df = pd.DataFrame({
'a': [1, 2, 3],
'b': [2., 3., 4.],
'c': ['string1', 'string2', 'string3'],
'd': [date(2000, 1, 1), date(2000, 2, 1), date(2000, 3, 1)],
'e': [datetime(2000, 1, 1, 12, 0), datetime(2000, 1, 2, 12, 0), datetime(2000, 1, 3, 12, 0)]
})
df = spark.createDataFrame(pandas_df)
df
2、Spark DataFrame转Pandas DataFrame
df.toPandas()
注意:PySpark的 DataFrame转成Pandas DataFrame的时候会把所有的数据collect到驱动器,因为Pandas的DataFrame不是分布式的,所以当数据量很大的时候,可能会内存溢出爆掉。
3、当一行数据量很大的时候,竖着展示
df.show(1, vertical=True)
4、查看列名和Schema
#查看列名
df.columns
#查看Schema
df.printSchema()
5、DataFrame的summary描述
#选择需要的列统计其summary描述
df.select("a", "b", "c").describe().show()
二、Pandas UDFs(也称为向量化的UDFs, Vectorized UDFs)在Spark DataFrame中使用