(1)完成数据的统计;
看清每一张表的具体限制!!!具体限制罗列出来!!!与项目经理确认;
数据统计的时候要实现的功能;SQL语句;group by后面可以跟两个条件,在紧接着也可以写order by再跟对应的group by后面的多个限制字段;
注意写csv文档的理解,保存成csv格式的代码,加强寻找资料的能力,找官方文档,不要随意百度!!!费时且不易理解!!
写csv的时候注意理解列表与字典的关系;
Left join的理解!对应的可能会去重的要求!!
######注意上述mapValues函数的返回,len(x),此处用的是x.mapValues(f),因此,由于其值为一个列表list而不是列表里面的元素,因此求其长度应等于该序列的大小’3’,而不是序列元素的大小,要注意切换角度理解,什么时候要看总体,什么时候要看局部;先从看总体入手,即关注字典,序列,元组;
注意:key是用于产生键的函数,其key=str的写法,即是将rdd里面所有的键产生并赋给变量str;
http://spark.apache.org/docs/latest/api/python/pyspark.html#pyspark.SparkFiles
当数据通过collect()之后,就是dataframe了,就可已按照python 处理了;
读写csv
可以按照Python读写csv文件写;
Data=[];#data 为列表的时候
Csv = open(‘csv’,’w’,newline=’’) # 设置newline,否则两行之间会空一行
Writer =csv.writer(csv)
M=length(data)
For i in range(M):
Writer.writerow(data[i])
Csv.close()
Data={}#data为字典时
Csv=open(‘csv’,’w’,newline=’’)
Writer2 = csv.writer(csv)
For key in dic :
Writer2.writerow([key,dic[key]])
Csv.close()
Spark-SQL之DataFrame操作
Spark SQL中的DataFrame类似于一张关系型数据表。在关系型数据库中对单表或进行的查询操作,在DataFrame中都可以通过调用其API接口来实现。
一、DataFrame对象的生成
Spark-SQL可以以其他RDD对象、parquet文件、json文件、Hive表,以及通过JDBC连接到其他关系型数据库作为数据源来生成DataFrame对象。本文将以MySQL数据库为数据源,生成DataFrame对象后进行相关的DataFame之上的操作。
(1)distinct:返回一个不包含重复记录的DataFrame
返回当前DataFrame中不重复的Row记录。该方法和接下来的dropDuplicates()方法不传入指定字段时的结果相同。
(2)dropDuplicates:根据指定字段去重
根据指定字段去重。类似于select distinct a, b操作
示例:
(3)withColumn:往当前DataFrame中新增一列
whtiColumn(colName: String , col: Column)方法根据指定colName往DataFrame中新增一列,如果colName已存在,则会覆盖当前列。
以下代码往jdbcDF中新增一个名为id2的列,
jdbcDF.withColumn("id2", jdbcDF("id")).show( false)
(3)
If else的应用,还有与for循环的联合写法,注意:如果想使满足某条件后,不做任何处理,只是按前面的程序执行的操作,就可以if 某条件:continue,;如果,满足条件后,要退出,则break;
注意建立字典的代码写法;
Others={}
For itr in data
Others(itr[‘_col1’])=itr[‘_col2’];
注意append的用法,不用:
A.ppend(name)
B.append(age)
不用C.append(A,B)
可以直接C=[A,B ]
https://docs.python.org/3/library/stdtypes.html#mapping-types-dict
Python官方文档:
字典虽然无序,但可以实现迭代;
列表,可变;
Range不可变,通常用作特定序列项来用;
元组不可变:画图,柱形图时会用到,x,Y坐标上的数会用到元组l
注意学习spark RDD 的用法;推断类型 schemaRDDS,print
Spark官方翻译文档!!!!!!;
SC是一个已经存在的SQLContext
schemaInfer类型推断;
查看推断的类型;
People =sqlContext.jsonFile(path)
People.printSchema()
上传文件的用法;指令!!!!
man -k terminal 不记得终端命令;
你将会发现Linux使用正斜线(/)而不是反斜线(\)在文件路径中划分目录。在Linux中,
反斜线用来标识转义字符,要是用在文件路径中的话会导致各种各样的问题。如果你之
前用的是Windows环境,就需要一点时间来适应。
在Linux中,你会看到下面这种路径:
/home/Rich/Documents/test.doc
这表明文件test.doc位于Documents目录,Documents又位于rich目录中,rich则在home目录中。
要注意的是,路径本身并没有提供任何有关文件究竟存放在哪个物理磁盘上的信息。
图3-2展示了计算机中的两块硬盘。一块硬盘和虚拟目录的根目录(由正斜线/表示)关联起
来。剩下的硬盘就可以挂载到虚拟目录结构中的任何地方。在这个例子中,第二块硬盘被挂载到
了/home位置,用户目录都位于这个位置。
1. 绝对文件路径
用户可在虚拟目录中采用绝对文件路径引用目录名。绝对文件路径定义了在虚拟目录结构中
该目录的确切位置,以虚拟目录的根目录开始,相当于目录的全名。
绝对文件路径总是以正斜线(/)作为起始,指明虚拟文件系统的根目录。因此,如果要指
向usr目录所包含的bin目录下的用户二进制文件,可以使用如下绝对文件路径:
/usr/bin
使用绝对文件路径可以清晰表明用户想切换到的确切位置。要用绝对文件路径来切换到文件
系统中的某个特定位置,只需在cd命令后指定全路径名:
christine@server01:~$ cd /usr/bin
christine@server01:/usr/bin$
注意,在上面的例子中,提示符中一开始有一个波浪号(~)。在切换到另一个目录之后,这
个波浪号被/usr/bin替代了。CLI提示符正是用它来帮助你跟踪当前所在虚拟目录结构中的位置。
波浪号表明shell会话位于你的主目录中。在切换出主目录之后,如果提示符已经进行了相关配置
的话,绝对文件路径就会显示在提示符中。
绝对路径以代表根目录的/开头;
而相对路径是在当前目录下的路径,不以/开头,
有两个特殊字符可用于相对文件路径中:
可以使用通配符复制或删除或移动文件!!
q 单点符(.),表示当前目录;复制文件到当前目录很有用 cp 路径1 .
,使用单点符要比输入完整的目标对象名省事得多。 查看cp 命令,可以使用man cp
cp命令的-R参数威力强大。可以用它在一条命令中递归地复制整个目录的内容。
也可以在cp命令中使用通配符。
该命令将所有以script结尾的文件复制到Mod_Scripts目录中。在这里,只需要复制一个文件:
my_script。制表键自动补全,tab键自动补全;
q 双点符(..),表示当前目录的父目录。
重命名文件
在Linux中,重命名文件称为移动(moving)。mv命令可以将文件和目录移动到另一个位置
或重新命名。
注意,移动文件会将文件名从fall更改为fzll,但inode编号和时间戳保持不变。这是因为mv
只影响文件名。
也可以使用mv来移动文件的位置。
Rm删除文件;记得加—i,一旦删除,无法回收;
创建目录:
Linux中有些命令(如cp)对文件和目录都有效!有些则不一样;
Mkdir 创建目录 加-p批量创建目录
Rmdir删除目录;
默认情况下,rmdir命令只删除空目录。因为我们在New_Dir目录下创建了一个文件my_file,
所以rmdir命令拒绝删除目录。要解决这一问题,得先把目录中的文件删掉,然后才能在空目录上使用rmdir命令。
一口气删除目录及其所有内容的终极大法就是使用带有-r参数和-f参数的rm命令。rm -rf命令既没有警告信息,也没有声音提示。这肯定是一个危险的工具,尤其是在拥有
超级用户权限的时候。务必谨慎使用,请再三检查你所要进行的操作是否符合预期。
查看文件内容
File a.txt
Dictionary:目录
查看整个文件
cat
cat命令是显示文本文件中所有数据的得力工具
Cat会一闪而过;而more 支持翻页;less比more更高级,若配置正确,它支持上下左右键;
Tail显示文件最后几行;head显示前几行;类似于tail命令,它也支持-n参数,这样就可以指定想要显示的内容了。这两个命令都允许你在破折号后面输入想要显示的行数:
head -5 log_file
tail -n 2 log_file
touch命令非常有用,可以创建空文件和变更已有文件的访问时间或修改时间。本章还介绍
了如何使用cp命令将已有文件复制到其他位置。另外还逐步介绍了如何链接文件,给出了一种简
单的方法可以实现在两个位置上拥有同一个文件且不用生成单独的副本。ln命令提供了这种链接
功能。
接着我们讲了怎样用mv命令重命名文件(在Linux中称为移动文件),以及如何用rm命令删除
文件(在Linux中称为移除文件),还介绍了怎样用mkdir和rmdir命令对目录执行相同的任务。
最后,本章以如何查看文件的内容作结。cat、more和less命令可以非常方便地查看文件
全部内容,而且tail和head命令还可查看文件中的一小部分内容。