PySpark的DataFrame处理方法
转:https://blog.csdn.net/weimingyu945/article/details/77981884
感谢!
-------------------------------------------------------------------------------------------------------
基本操作:
| sparksn = SparkSession.builder.appName("PythonSQL").getOrCreate()
print sparksn.version
|
| pandas_df = spark_df.toPandas() | spark_df = sqlContext.createDataFrame(pandas_df) |
| rdd_df = df.rdd | df = rdd_df.toDF() |
| df.withColumn(“xx”, 0).show() 会报错,因为原来没有xx列
from pyspark.sql import functions
df = df.withColumn(“xx”, functions.lit(0)).show()
|
| df.na.fill() |
| df = df.withColumn('count20', df["count"] - 20) # 新列为原有列的数据减去20 |
| df.drop('age').collect()
df.drop(df.age).collect()
|
| df = df.na.drop() # 扔掉任何列包含na的行 df = df.dropna(subset=['col_name1', 'col_name2']) # 扔掉col1或col2中任一一列包含na的行 |
| df = df.withColumn(“xx”, 1) |
| df = df.withColumn("year2", df["year1"].cast("Int")) |
| df_join = df_left.join(df_right, df_left.key == df_right.key, "inner") |
| GroupedData = df.groupBy(“age”)
应用单个函数(按照A列同名的进行分组,组内对B列进行均值计算来合并): df.groupBy(“A”).avg(“B”).show()
应用多个函数:
from pyspark.sql import functions
df.groupBy(“A”).agg(functions.avg(“B”), functions.min(“B”), functions.max(“B”)).show()
|
| df.foreach(f) 或者 df.rdd.foreach(f) |
| df.foreachPartition(f) 或者 df.rdd.foreachPartition(f) |
| df.map(func) df.reduce(func) |
| @staticmethod
def map_convert_none_to_str(row):
dict_row = row.asDict()
for key in dict_row:
if key != 'some_column_name':
value = dict_row[key]
if value is None:
value_in = str("")
else:
value_in = str(value)
dict_row[key] = value_in
columns = dict_row.keys()
v = dict_row.values()
row = Row(*columns)
return row(*v)
|
| df.show() df.show(30) |
| df.printSchema() |
| list = df.head(3) # Example: [Row(a=1, b=1), Row(a=2, b=2), ... ...] list = df.take(5) # Example: [Row(a=1, b=1), Row(a=2, b=2), ... ...] |
| list = df.collect() |
| int_num = df.count() |
| from pyspark.sql.functions import isnull df = df.filter(isnull("col_a")) |
| r = Row(age=11, name='Alice') print r.__fields__ # ['age', 'name'] |
|
df.select(“name”)
df.select(df[‘name’], df[‘age’]+1)
df.select(df.a, df.b, df.c) # 选择a、b、c三列
df.select(df["a"], df["b"], df["c"]) # 选择a、b、c三列
|
| df = df.sort("age", ascending=False) |
| df = df.filter(df['age']>21) df = df.where(df['age']>21) # 对null或nan数据进行过滤: |
| df.createOrReplaceTempView("TBL1") |
| conf = SparkConf() ss = SparkSession.builder.appName("APP_NAME").config(conf=conf).getOrCreate() df = ss.sql(“SELECT name, age FROM TBL1 WHERE age >= 13 AND age <= 19″) |
| from pyspark.sql.functions import window
win_monday = window("col1", "1 week", startTime="4 day")
GroupedData = df.groupBy([df.col2, df.col3, df.col4, win_monday])
|
| mysql>
SELECT
MIN(yearD),
MAX(yearD) AS max_year,
Carrier,
COUNT(*) AS cnt,
SUM(IF(ArrDelayMinutes > 30, 1, 0)) AS flights_delayed,
ROUND(SUM(IF(ArrDelayMinutes > 30, 1, 0)) / COUNT(*),2) AS rate
FROM
ontime_part
WHERE
DayOfWeek NOT IN (6 , 7)
AND OriginState NOT IN ('AK' , 'HI', 'PR', 'VI')
AND DestState NOT IN ('AK' , 'HI', 'PR', 'VI')
GROUP BY carrier
HAVING cnt > 1000 AND max_year > '1990'
ORDER BY rate DESC , cnt DESC
LIMIT 10;
|
| scala>
val jdbcDF = spark.read.format("jdbc").options(Map("url" -> "jdbc:mysql://localhost:3306/ontime?user=root&password=mysql",
"dbtable" -> "ontime.ontime_sm",
"fetchSize" -> "10000",
"partitionColumn" -> "yeard",
"lowerBound" -> "1988",
"upperBound" -> "2015",
"numPartitions" -> "48")).load()
jdbcDF.createOrReplaceTempView("ontime")
val sqlDF = sql("SELECT
MIN(yearD),
MAX(yearD) AS max_year,
Carrier,
COUNT(*) AS cnt,
SUM(IF(ArrDelayMinutes > 30, 1, 0)) AS flights_delayed,
ROUND(SUM(IF(ArrDelayMinutes > 30, 1, 0)) / COUNT(*),2) AS rate
FROM
ontime_part
WHERE
DayOfWeek NOT IN (6 , 7)
AND OriginState NOT IN ('AK' , 'HI', 'PR', 'VI')
AND DestState NOT IN ('AK' , 'HI', 'PR', 'VI')
GROUP BY carrier
HAVING cnt > 1000 AND max_year > '1990'
ORDER BY rate DESC , cnt DESC
LIMIT 10;
")
sqlDF.show()
|
PySpark的DataFrame处理方法的更多相关文章
- Python DataFrame to_sql方法插入日期或时间类型的数据时 报ORA-01861 文字与字符串不匹配 的解决方法
业务团队近期提出一个需求: 希望在接口调用之前先批量插入Excel中的数据作为数据预置 这个需求以前已经开发完成 本来以为可以很快调试完毕 没成想遭遇一个难关 DataFrame.to_sql方法在执 ...
- python pandas dataframe to_sql方法error及其解决
今天遇到了一个问题,很是奇怪,自己也想了一个另类的方法将其解决了,现在将详细过程经过记录如下: 我在处理完一个dataframe之后,需要将其写回到数据库.这个dataframe比较大,共有53列,7 ...
- python pandas ---Series,DataFrame 创建方法,操作运算操作(赋值,sort,get,del,pop,insert,+,-,*,/)
pandas 是基于 Numpy 构建的含有更高级数据结构和工具的数据分析包 pandas 也是围绕着 Series 和 DataFrame 两个核心数据结构展开的, 导入如下: from panda ...
- pyspark使用-dataframe操作
一.读取csv文件 1.用pandas读取 import pandas as pd from pyspark.sql import SparkSession spark=SparkSession.bu ...
- 【转载】Spark SQL 1.3.0 DataFrame介绍、使用
http://www.aboutyun.com/forum.php?mod=viewthread&tid=12358&page=1 1.DataFrame是什么?2.如何创建DataF ...
- 《Spark Python API 官方文档中文版》 之 pyspark.sql (一)
摘要:在Spark开发中,由于需要用Python实现,发现API与Scala的略有不同,而Python API的中文资料相对很少.每次去查英文版API的说明相对比较慢,还是中文版比较容易get到所需, ...
- 《Spark Python API 官方文档中文版》 之 pyspark.sql (二)
摘要:在Spark开发中,由于需要用Python实现,发现API与Scala的略有不同,而Python API的中文资料相对很少.每次去查英文版API的说明相对比较慢,还是中文版比较容易get到所需, ...
- Spark核心类:SQLContext和DataFrame
http://blog.csdn.net/pipisorry/article/details/53320669 pyspark.sql.SQLContext Main entry point for ...
- 《Spark Python API 官方文档中文版》 之 pyspark.sql (四)
摘要:在Spark开发中,由于需要用Python实现,发现API与Scala的略有不同,而Python API的中文资料相对很少.每次去查英文版API的说明相对比较慢,还是中文版比较容易get到所需, ...
随机推荐
- Spring使用@Required注解依赖检查
Spring依赖检查 bean 配置文件用于确定的特定类型(基本,集合或对象)的所有属性被设置.在大多数情况下,你只需要确保特定属性已经设置但不是所有属性.. 对于这种情况,你需要 @Required ...
- 让mbox支持up效果
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- Assignment (HDU 2853 最大权匹配KM)
Assignment Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- Unity 国际化 多语言设置
很多游戏中都有语言设置选项,NGUI插件中自带了国际化脚本,但是灵活性较低,而且目前项目是UGUI,以下是修改后,以便记录. Localization和NGUI中用法一样,挂在在一个不销毁的游戏物体上 ...
- Python continue 语句
Python continue 语句 Python continue 语句跳出本次循环,而break跳出整个循环. continue 语句用来告诉Python跳过当前循环的剩余语句,然后继续进行下一轮 ...
- 安装完Framework后如何不重启系统?
在.net平台下客户端部署时,如果客户端没有安装Framework时,部署程序安装Framework后,有一个要求重启选项,当然是非强制的.如果不想出现这个提示“重启”选项,可以做如下选择: 1.启动 ...
- Appium+python自动化18-brew、carthage和appium-doctor
前言 本篇安装brew.carthage,解决启动appium时的报错问题,另外安装appium-doctor检查appium的环境 1.brew 2.carthage 3.appium-doctor ...
- 在Android 5.0中使用JobScheduler
在Android 5.0中使用JobScheduler 原文链接 : using-the-jobscheduler-api-on-android-lollipop 译者 : Mr.Simple 校对者 ...
- [Android Studio] Android Studio快速定位当前打开的文件在哪个目录(package)下
转载自:http://blog.csdn.net/hyr83960944/article/details/38067499 在Eclipse中有一个很好的功能,就是比如我打开一个AActivity,左 ...
- [Windows]_[删除非空文件夹的注意要点]
场景: 1. 有时候程序须要生成一些暂时文件夹和暂时文件,在程序退出时须要删除,这时候用win32的api就可以完毕需求.自己遍历文件夹一个个removefile并非高效率的做法. //注意: //1 ...