java spark读取csv_在读取CSV文件时支持SparkSQL中的Map数据类型

我有一个CSV文件,其中包含各自列中的Map类型数据和Array类型数据 . 我试图在SparkSQL中创建一个数据框,但它会抛出一个错误,说不支持的类型映射和数组 . 我在Spark 1.6.3和Spark 2.2.1中尝试过这个 . 这是代码:

Spark1.6.3:

pyspark --packages com.databricks:spark-csv_2.10:1.5.0

from pyspark.sql import SQLContext

from pyspark.sql.types import *

sqlContext=SQLContext(sc)

customSchema=StructType([StructField("eid",StringType(),True),StructField("username",StringType(),True),StructField("shipping_address",MapType(StringType(), StringType(), True),True),StructField("email_address",StringType(),True),StructField("phone_number",StringType(),True),StructField("ip_address",StringType(),True),StructField("payment_mode",StringType(),True),StructField("billing_amount",IntegerType(),True),StructField("product_details",ArrayType(StringType(),True),True)])

df1 = sqlContext.read.format('com.databricks.spark.csv').options(header='true').load('/data/ordersdata.csv',schema=customSchema)

df1.show()//when I run this command I get an error:"Unsupported type: map"

Spark 2.21:

from pyspark.sql import SQLContext

from pyspark.sql.types import *

sqlContext=SQLContext(sc)

customSchema=StructType([StructField("eid",StringType(),True),StructField("username",StringType(),True),StructField("shipping_address",MapType(StringType(), StringType(), True),True),StructField("email_address",StringType(),True),StructField("phone_number",StringType(),True),StructField("ip_address",StringType(),True),StructField("payment_mode",StringType(),True),StructField("billing_amount",IntegerType(),True),StructField("product_details",ArrayType(StringType(),True),True)])

df2=spark.read.csv("/data/ordersdata.csv", schema=customSchema, header='true')

df2.show() //when I run this command I get an error:"Unsupported type: map"

实际上,我的要求是从CSV文件中的 Map 类型列中提取键值对,并使用键作为列 Headers 创建新列,并将相应的值存储在同一数据帧中 . 例如,CSV文件中的 Map 数据如下所示:

{"address_line":"Ridge 2897","zip_code":"15201","city":"Pittsburgh","state":"Pennsylvania","phone_no":"9832901309"}

现在,我想创建如下所示的列,并将它们添加到使用CSV文件创建的主数据框中 .

address_line | zip_code | city | state | phone_no

Ridge 2897 | 15201 | Pittsburgh | Pennsylvania | 9832901309

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值