sparkSql(hive) 复合数据类型的使用
2017-01-09 22:48
405 查看
在Hive中可以使用复合数据类型,有三种常用的类型:Array 数组,Map 字典,Struct结构。在sparkSql中RDD可以转换成非常灵活的DataFrame,有下面几种语法:
rdd=sc.parallelize([1,2,3])
a=rdd.map(lambda item:Row(item))
schema=['test_colum']
a=a.toDF(schema)
a=rdd.map(lambda item:Row(item))
sqlContext.createDataFrame(a,['test_colum'])
schema=StructType([StructField('test_colum',StringType,True)])
df=sqlContext.applySchema(rdd,schema)
最后一种创建方式可以很灵活的设置字段的类型,包括数据类型和复合类型
但是如果需要将数据结构完整的存储为Hive表,那么在RDD到DataFrame转换中需要遵守一些规则。
在Hive中创建复合数据类型的语法:
create table plan(
clientid string
,plan_info array<map<string,string>> --originalid,yield
)
Hive 中数据类型可以继续嵌套到很复杂的程度
业务背景:一个用户可以创建多个组合,需要按照用户的维度提取组合ID及累积收益率,并插入到Hive表中
rdd=sc.parallelize([([{'originalid':'A01',yield:1.11},{'origianlid':'A02','yield':1.23}],)])
schema=StructType([StructField('plan',ArrayType(MapType(StringType,StringType,True),True),True)])
table=sqlContext.createDataFrame(rdd,schema)
table.registerTempTable("t1")
sqlContext.sql("create table zhanbing_test as select * from t1")
在Hive中的Map类型是有Spark中的dict类型转换而来,在Hive中智能指定一种数据类型但是在spark中可以根据key的不同,对value指定多种,所以最好使用String类型
rdd=sc.parallelize([1,2,3])
a=rdd.map(lambda item:Row(item))
schema=['test_colum']
a=a.toDF(schema)
a=rdd.map(lambda item:Row(item))
sqlContext.createDataFrame(a,['test_colum'])
schema=StructType([StructField('test_colum',StringType,True)])
df=sqlContext.applySchema(rdd,schema)
最后一种创建方式可以很灵活的设置字段的类型,包括数据类型和复合类型
但是如果需要将数据结构完整的存储为Hive表,那么在RDD到DataFrame转换中需要遵守一些规则。
在Hive中创建复合数据类型的语法:
create table plan(
clientid string
,plan_info array<map<string,string>> --originalid,yield
)
Hive 中数据类型可以继续嵌套到很复杂的程度
业务背景:一个用户可以创建多个组合,需要按照用户的维度提取组合ID及累积收益率,并插入到Hive表中
rdd=sc.parallelize([([{'originalid':'A01',yield:1.11},{'origianlid':'A02','yield':1.23}],)])
schema=StructType([StructField('plan',ArrayType(MapType(StringType,StringType,True),True),True)])
table=sqlContext.createDataFrame(rdd,schema)
table.registerTempTable("t1")
sqlContext.sql("create table zhanbing_test as select * from t1")
在Hive中的Map类型是有Spark中的dict类型转换而来,在Hive中智能指定一种数据类型但是在spark中可以根据key的不同,对value指定多种,所以最好使用String类型
相关文章推荐
- PL/SQL_使用复合数据类型5(批量绑定)
- 使用复合数据类型——PL/SQL表
- hive原生和复合类型的数据加载和使用
- hive原生和复合类型的数据加载和使用
- PL/SQL_使用复合数据类型1(PL/SQL记录)
- 使用复合数据类型——PL/SQL记录
- PL/SQL使用复合数据类型4(集合操作符、比较集合)
- hive原生和复合类型的数据加载和使用
- hive原生和复合类型的数据加载和使用
- hive复合数据类型 array、map、struct使用
- HIVE原生和复合类型的数据加载和使用
- Hive复合数据类型array,map,struct的使用
- PL/SQL_使用复合数据类型3(多级集合)
- Hive复合数据类型array,map,struct的使用
- hive原生和复合类型的数据加载和使用
- 使用复合数据类型——PL/SQL记录表
- hive原生和复合类型的数据加载和使用
- PL/SQL_使用复合数据类型2(PL/SQL集合)
- hive原生和复合类型的数据加载和使用
- hive原生和复合类型的数据载入和使用