Spark多语⾔言编程陈超@CrazyJvm编程接⼝口!•Scala(强烈推荐)•Python(推荐,以后会越来越好)•Java(呵呵,Java8后可以⼀一⽤用)Python•Lifeisshort.YouneedPython.•⼈人⽣生苦短,我⽤用Python。SparkwithPython•PySpark•Python2.x(需要2.6以上版本,最好安装2.7.x)Python•动态语⾔言•不使⽤用{}来组织代码,⽽而⽤用代码缩进!•运⾏行pythonxx.py•注释#writeyourcommenthere•指定编码#-*-coding:UTF-8-*-变量•变量⽆无需事先声明•变量⽆无需指定类型•不需要关⼼心内存管理if语句ifexpression:writeyourcodehere!ifnot…and…or…:writeyourcodehere!ifexpression:…else:…if语句续ifexpression1:…elifexpression2:…else:…!x,y=1,2z=xifxyelsey循环whileexpression:yourcode!foriter_variniterable:yourcode!range()函数!序列•字符串•元组•列表序列切⽚片操作•seq或seq[:]取整个序列•seq[0:N]或seq[:N]取前N个元素•seq[M:N]取第M+1到N的元素(前开后闭的区间)•seq[M:]取第M+1到结束的元素•seq[M:N:K]步⻓长为k,取第M+1到N的元素•反向切⽚片(索引为负)列表•使⽤用[]创建•判断元素是否在序列⾥里in/notin•遍历列表foriinseq:•取得⻓长度len(seq)•取得最⼤大最⼩小值max(seq)/min(seq)•排序sorted(seq)元组•元组不变性•⽤用()创建•in/notin•foriintuple字典•以{}创建列表•以d[key_name]访问字典中的值•forkeyind:来遍历字典中所有的元素•d.keys(),d.values()分别取得所有key与所有value创建函数deffunction_name(args):“function_documentation_string”function_body_suitelambda函数•lambda[arg1[,arg2,…,argN]]:expression•lambdax,y=2:x+y类与对象classClassName(bases):‘classdocumentationstring’class_suite!obj=ClassName()导⼊入包•frommoduleimportvar•frommoduleimport*•importmodule1[,module2[,…moduleN]]PySparkAPI•Python是动态语⾔言,RDD可以持有不同类型的对象•PySpark⺫⽬目前并没有⽀支持全部的API,核⼼心部分已经全部⽀支持安装部署•安装2.6及以上的Python,强烈建议2.7,注意别使⽤用Python3•建议在环境变量中做如下设置exportPYTHONPATH=$SPARK_HOME/pythonMLlib•Demo—你会发现使⽤用Python将是⽆无⽐比简洁SparkwithJava•Java8之前,写的代码⽆无⽐比繁琐,Java8的情况下,还凑活!FunctionClassJava8的lambda•(x,y)-{returnx+y;}•(x,y)-x+y;•x-{System.out.println(x);}•()-{System.out.println(“thisisJava8”);}•DemoforJava谢谢!欢迎关注我的公众微信号,经常会聊Spark相关的话题!ChinaScala27