微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

具有多种数据类型的 Pyspark SQL 数据框映射

如何解决具有多种数据类型的 Pyspark SQL 数据框映射

我在胶水中有一个 pyspark 代码,我想在其中创建一个数据框,其地图结构是整数和字符串的组合。

样本数据:

{ "Candidates": [
    {
      "jobLevel": 6,"name": "Steven",},{
      "jobLevel": 5,"name": "Abby",} ] }

因此,我尝试使用以下代码来创建地图数据类型。但是每次将整数数据类型 jobLevel 转换为字符串数据类型时。有什么建议可以通过保留作业级别的数据类型来完成这项工作吗?

使用的代码

df = spark.sql("select Supervisor_name,map('job_level',INT(job_level_name),'name',employeeLogin) as Candidates 
     from dataset_1")

解决方法

我是 pyspark 的新手 :-)。但是,让我们尝试并行化,然后将模式定义为所需的;

js={ "Candidates": [
    {
      "jobLevel": 6,"name": "Steven",},{
      "jobLevel": 5,"name": "Abby",} ] }



    from pyspark.sql.types import *
    df=sc.parallelize(js["Candidates"])
    schema = StructType([StructField('name',StringType(),True),StructField('jobLevel',IntegerType(),True)])
    df1=spark.read.json(df,schema)
    df1.show(truncate=False)
    df1.printSchema()

我明白了:

+------+--------+
|name  |jobLevel|
+------+--------+
|Steven|6       |
|Abby  |5       |
+------+--------+

root
 |-- name: string (nullable = true)
 |-- jobLevel: integer (nullable = true)
,

地图值不可能有不同的类型。在这种情况下使用结构体。

df = spark.sql("""
    select Supervisor_name,struct(INT(job_level_name) as job_level,employeeLogin as name
                 ) as Candidates 
    from dataset_1
""")

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。