spark dataframe的分分合合 - join和select分割
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | emp = [( 1 , "Smith" , - 1 , "2018" , "10" , "M" , 3000 ), \ ( 2 , "Rose" , 1 , "2010" , "20" , "M" , 4000 ), \ ( 3 , "Williams" , 1 , "2010" , "10" , "M" , 1000 ), \ ( 4 , "Jones" , 2 , "2005" , "10" , "F" , 2000 ), \ ( 5 , "Brown" , 2 , "2010" , "40" ,"", - 1 ), \ ( 6 , "Brown" , 2 , "2010" , "50" ,"", - 1 ) \ ] empColumns = [ "emp_id" , "name" , "superior_emp_id" , "year_joined" , \ "emp_dept_id" , "gender" , "salary" ] empDF = spark.createDataFrame(data = emp, schema = empColumns) empDF.printSchema() empDF.show(truncate = False ) dept = [( "Finance" , 10 ), \ ( "Marketing" , 20 ), \ ( "Sales" , 30 ), \ ( "IT" , 40 ) \ ] deptColumns = [ "dept_name" , "dept_id" ] deptDF = spark.createDataFrame(data = dept, schema = deptColumns) deptDF.printSchema() deptDF.show(truncate = False ) |
运行结果:
Emp Dataset
+------+--------+---------------+-----------+-----------+------+------+
|emp_id|name |superior_emp_id|year_joined|emp_dept_id|gender|salary|
+------+--------+---------------+-----------+-----------+------+------+
|1 |Smith |-1 |2018 |10 |M |3000 |
|2 |Rose |1 |2010 |20 |M |4000 |
|3 |Williams|1 |2010 |10 |M |1000 |
|4 |Jones |2 |2005 |10 |F |2000 |
|5 |Brown |2 |2010 |40 | |-1 |
|6 |Brown |2 |2010 |50 | |-1 |
+------+--------+---------------+-----------+-----------+------+------+
Dept Dataset
+---------+-------+
|dept_name|dept_id|
+---------+-------+
|Finance |10 |
|Marketing|20 |
|Sales |30 |
|IT |40 |
+---------+-------+
我自己运行示例,可以看到select是可以直接分割列的(准确说是选择列):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | >>> emp = [( 1 , "Smith" , - 1 , "2018" , "10" , "M" , 3000 ), \ ... ( 2 , "Rose" , 1 , "2010" , "20" , "M" , 4000 ), \ ... ( 3 , "Williams" , 1 , "2010" , "10" , "M" , 1000 ), \ ... ( 4 , "Jones" , 2 , "2005" , "10" , "F" , 2000 ), \ ... ( 5 , "Brown" , 2 , "2010" , "40" ,"", - 1 ), \ ... ( 6 , "Brown" , 2 , "2010" , "50" ,"", - 1 ) \ ... ] >>> empColumns = [ "emp_id" , "name" , "superior_emp_id" , "year_joined" , \ ... "emp_dept_id" , "gender" , "salary" ] >>> >>> empDF = spark.createDataFrame(data = emp, schema = empColumns) >>> empDF.printSchema() root | - - emp_id: long (nullable = true) | - - name: string (nullable = true) | - - superior_emp_id: long (nullable = true) | - - year_joined: string (nullable = true) | - - emp_dept_id: string (nullable = true) | - - gender: string (nullable = true) | - - salary: long (nullable = true) >>> empDF.show(truncate = False ) + - - - - - - + - - - - - - - - + - - - - - - - - - - - - - - - + - - - - - - - - - - - + - - - - - - - - - - - + - - - - - - + - - - - - - + |emp_id|name |superior_emp_id|year_joined|emp_dept_id|gender|salary| + - - - - - - + - - - - - - - - + - - - - - - - - - - - - - - - + - - - - - - - - - - - + - - - - - - - - - - - + - - - - - - + - - - - - - + | 1 |Smith | - 1 | 2018 | 10 |M | 3000 | | 2 |Rose | 1 | 2010 | 20 |M | 4000 | | 3 |Williams| 1 | 2010 | 10 |M | 1000 | | 4 |Jones | 2 | 2005 | 10 |F | 2000 | | 5 |Brown | 2 | 2010 | 40 | | - 1 | | 6 |Brown | 2 | 2010 | 50 | | - 1 | + - - - - - - + - - - - - - - - + - - - - - - - - - - - - - - - + - - - - - - - - - - - + - - - - - - - - - - - + - - - - - - + - - - - - - + >>> >>> dept = [( "Finance" , 10 ), \ ... ( "Marketing" , 20 ), \ ... ( "Sales" , 30 ), \ ... ( "IT" , 40 ) \ ... ] >>> deptColumns = [ "dept_name" , "dept_id" ] >>> deptDF = spark.createDataFrame(data = dept, schema = deptColumns) >>> deptDF.printSchema() root | - - dept_name: string (nullable = true) | - - dept_id: long (nullable = true) >>> deptDF.show(truncate = False ) + - - - - - - - - - + - - - - - - - + |dept_name|dept_id| + - - - - - - - - - + - - - - - - - + |Finance | 10 | |Marketing| 20 | |Sales | 30 | |IT | 40 | + - - - - - - - - - + - - - - - - - + >>> empDF.join(deptDF,empDF.emp_dept_id = = deptDF.dept_id, "inner" ) \ ... .show(truncate = False ) + - - - - - - + - - - - - - - - + - - - - - - - - - - - - - - - + - - - - - - - - - - - + - - - - - - - - - - - + - - - - - - + - - - - - - + - - - - - - - - - + - - - - - - - + |emp_id|name |superior_emp_id|year_joined|emp_dept_id|gender|salary|dept_name|dept_id| + - - - - - - + - - - - - - - - + - - - - - - - - - - - - - - - + - - - - - - - - - - - + - - - - - - - - - - - + - - - - - - + - - - - - - + - - - - - - - - - + - - - - - - - + | 1 |Smith | - 1 | 2018 | 10 |M | 3000 |Finance | 10 | | 3 |Williams| 1 | 2010 | 10 |M | 1000 |Finance | 10 | | 4 |Jones | 2 | 2005 | 10 |F | 2000 |Finance | 10 | | 2 |Rose | 1 | 2010 | 20 |M | 4000 |Marketing| 20 | | 5 |Brown | 2 | 2010 | 40 | | - 1 |IT | 40 | + - - - - - - + - - - - - - - - + - - - - - - - - - - - - - - - + - - - - - - - - - - - + - - - - - - - - - - - + - - - - - - + - - - - - - + - - - - - - - - - + - - - - - - - + >>> alldf = empDF.join(deptDF,empDF.emp_dept_id = = deptDF.dept_id, "inner" ) >>> alldf.show() + - - - - - - + - - - - - - - - + - - - - - - - - - - - - - - - + - - - - - - - - - - - + - - - - - - - - - - - + - - - - - - + - - - - - - + - - - - - - - - - + - - - - - - - + |emp_id| name|superior_emp_id|year_joined|emp_dept_id|gender|salary|dept_name|dept_id| + - - - - - - + - - - - - - - - + - - - - - - - - - - - - - - - + - - - - - - - - - - - + - - - - - - - - - - - + - - - - - - + - - - - - - + - - - - - - - - - + - - - - - - - + | 1 | Smith| - 1 | 2018 | 10 | M| 3000 | Finance| 10 | | 3 |Williams| 1 | 2010 | 10 | M| 1000 | Finance| 10 | | 4 | Jones| 2 | 2005 | 10 | F| 2000 | Finance| 10 | | 2 | Rose| 1 | 2010 | 20 | M| 4000 |Marketing| 20 | | 5 | Brown| 2 | 2010 | 40 | | - 1 | IT| 40 | + - - - - - - + - - - - - - - - + - - - - - - - - - - - - - - - + - - - - - - - - - - - + - - - - - - - - - - - + - - - - - - + - - - - - - + - - - - - - - - - + - - - - - - - + >>> alldf.select( "emp_id" , "name" ) DataFrame[emp_id: bigint, name: string] >>> alldf.select( "emp_id" , "name" ).show() + - - - - - - + - - - - - - - - + |emp_id| name| + - - - - - - + - - - - - - - - + | 1 | Smith| | 3 |Williams| | 4 | Jones| | 2 | Rose| | 5 | Brown| + - - - - - - + - - - - - - - - + >>> alldf.show(truncate = False ) + - - - - - - + - - - - - - - - + - - - - - - - - - - - - - - - + - - - - - - - - - - - + - - - - - - - - - - - + - - - - - - + - - - - - - + - - - - - - - - - + - - - - - - - + |emp_id|name |superior_emp_id|year_joined|emp_dept_id|gender|salary|dept_name|dept_id| + - - - - - - + - - - - - - - - + - - - - - - - - - - - - - - - + - - - - - - - - - - - + - - - - - - - - - - - + - - - - - - + - - - - - - + - - - - - - - - - + - - - - - - - + | 1 |Smith | - 1 | 2018 | 10 |M | 3000 |Finance | 10 | | 3 |Williams| 1 | 2010 | 10 |M | 1000 |Finance | 10 | | 4 |Jones | 2 | 2005 | 10 |F | 2000 |Finance | 10 | | 2 |Rose | 1 | 2010 | 20 |M | 4000 |Marketing| 20 | | 5 |Brown | 2 | 2010 | 40 | | - 1 |IT | 40 | + - - - - - - + - - - - - - - - + - - - - - - - - - - - - - - - + - - - - - - - - - - - + - - - - - - - - - - - + - - - - - - + - - - - - - + - - - - - - - - - + - - - - - - - + |
标签:
spark
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
2017-08-12 Spark技术在京东智能供应链预测的应用——按照业务进行划分,然后利用scikit learn进行单机训练并预测
2017-08-12 SaltStack介绍——SaltStack是一种新的基础设施管理方法开发软件,简单易部署,可伸缩的足以管理成千上万的服务器,和足够快的速度控制,与他们交流
2017-08-12 英特尔深度学习框架BigDL——a distributed deep learning library for Apache Spark