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

Pyspark SQL dataframe map with multiple data types

我在 glue 中有一个 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
""")