主页博客地址:Spark小节
https://blog.icocoro.me
Spark处理字符串日期的max和min的方式
Spark处理数据存储到Hive的方式
Spark处理新增列的方式map和udf、functions
Spark处理行转列pivot的使用
Python 3.5.3
Spark1.6.2
一般是字符串类型的日期在使用Spark的agg求max时,是不正确的,API显示只支持数值型的max、min
hive的SQL查询引擎是支持字符串日期的max和min的
unix_timestamp
public static Column unix_timestamp(Column s) Converts time string in format yyyy-MM-dd HH:mm:ss to Unix timestamp (in seconds), using the default timezone and the default locale, return null if fail. Parameters: s - (undocumented) Returns: (undocumented) Since: 1.5.0 from pyspark.sql import functions as F df.withColumn('startuptime_stamp', F.unix_timestamp('startuptime')) 使用HiveSQL select device_id, max(startuptime) as max_startuptime, min(startuptime) as min_startuptime from app_table group by device_id Spark处理数据存储到Hive的方式通常Spark任务处理后的结果数据会存储到Hive表中,可以先保存至HDFS目录再load、最方便还是直接使用临时表和HiveContext插入数据
saveAsTextFile & load datarepartition根据实际文件大小进行调整,数据比较小时,保存成一个文件
df.map(lambda r: func).repartition(1).saveAsTextFile(data_dir)先删除分区,如果已经存在的话
再覆盖原来的数据【方便重新重复跑或修复数据】
此处使用shell,也可使用HiveContext的sql
Spark在处理数据转换时,通常需要使用map、flatmap等操作,其中使用map会产生新的列或修改某列字段的值
Spark同样支持自定义函数UDF以及提供了类似Hive内置函数的各种各样的处理函数
需要定义函数和StructType
忽略数值判断细节和精度等
需要定义函数和UDF
忽略数值判断细节和精度等
处理类似日期字符串的格式转换、等等等
https://spark.apache.org/docs/1.6.2/api/java/org/apache/spark/sql/functions.html
在使用SQL查询数据时,很多情况下需要将行转为列,以有利于数据的展示和不同维度需求的利用
一般可采用子查询case when、连续join、字段补全union的形式
Spark的DataFrame中可以通过GroupedData的pivot函数来实现
转换前
daystr course_name score 2017-11-15 yuwen 1 2017-11-15 yuwen 1 2017-11-15 shuxue 1 2017-11-15 yingyu 2 2017-11-16 yuwen 1 2017-11-16 shuxue 1 2017-11-16 yingyu 2转换后
course_name 2017-11-15 2017-11-16 yuwen 2 1 shuxue 1 1 yingyu 2 2 course_name 2017-11-15 2017-11-16 yuwen 2 1 shuxue 1 1 yingyu 1 1郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。