具有多种数据类型的 Pyspark SQL 数据帧映射
Posted
技术标签:
【中文标题】具有多种数据类型的 Pyspark SQL 数据帧映射【英文标题】:Pyspark SQL dataframe map with multiple data types 【发布时间】:2021-07-09 00:27:57 【问题描述】:我在胶水中有一个 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")
【问题讨论】:
【参考方案1】:地图值不可能有不同的类型。在这种情况下使用结构体。
df = spark.sql("""
select Supervisor_name,
struct(INT(job_level_name) as job_level,
employeeLogin as name
) as Candidates
from dataset_1
""")
【讨论】:
【参考方案2】:我是 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)
【讨论】:
以上是关于具有多种数据类型的 Pyspark SQL 数据帧映射的主要内容,如果未能解决你的问题,请参考以下文章
Pyspark 数据框:将 jdbc 写入具有给定模式的表的动态创建
Pyspark 忽略 pyspark-sql-functions 中数据帧的过滤
具有数百万条记录的 2 个数据帧之间的 Pyspark 交叉连接