Python 3.x 如何使用SparkSQL按列数据类型将数据帧拆分为多个数据帧?

Python 3.x 如何使用SparkSQL按列数据类型将数据帧拆分为多个数据帧?,python-3.x,apache-spark,apache-spark-sql,pyspark-sql,Python 3.x,Apache Spark,Apache Spark Sql,Pyspark Sql,下面是示例数据帧,我想根据数据类型将其拆分为多个数据帧或rdd ID:Int Name:String Joining_Date: Date 我的数据框中有100多个列,是否有任何内置方法来实现此逻辑?据我所知,没有内置功能来实现这一点,不过这里有一种方法可以根据列类型将一个数据框分离为多个数据框 首先让我们创建一些数据: 从pyspark.sql.functions导入col 从pyspark.sql.types导入StructType、StructField、StringType、LongT

下面是示例数据帧,我想根据数据类型将其拆分为多个数据帧或rdd

ID:Int
Name:String
Joining_Date: Date

我的数据框中有100多个列,是否有任何内置方法来实现此逻辑?

据我所知,没有内置功能来实现这一点,不过这里有一种方法可以根据列类型将一个数据框分离为多个数据框

首先让我们创建一些数据:

从pyspark.sql.functions导入col
从pyspark.sql.types导入StructType、StructField、StringType、LongType、DateType
df=spark.createDataFrame([
(0,11,“t1”,“s1”,“2019-10-01”),
(0,22,“t2”,“s2”,“2019-02-11”),
(1,23,“t3”,“s3”,“2018-01-10”),
(1,24,“t4”、“s4”、“2019-10-01”)、[“i1”、“i2”、“s1”、“s2”、“日期”])
df=df.带列(“日期”,列(“日期”).cast(“日期”))
#df.printSchema()
#根
#|--i1:long(nullable=true)
#|--i2:long(nullable=true)
#|--s1:字符串(nullable=true)
#|--s2:string(nullable=true)
#|--date:date(nullable=true)
然后,我们将前一个数据帧的列分组到字典中,其中键为列类型,值为列表,列对应于该类型:

d={}
#按类型将COL分组为dict
对于df.schema中的c:
key=c.dataType
如果未输入d.keys():
d[键]=[c.名称]
其他:
d[key]。追加(c.name)
D
#{DateType:['date'],StringType:['s1','s2'],LongType:['i1','i2']}
然后,我们迭代键(列类型),并为字典的每个项生成模式以及相应的空数据帧:

type_dfs={}
#为每种类型创建架构
对于k in d.keys():
schema=StructType(
[
d[k]中cname的结构字段(cname,k)
])
#最后使用该模式创建一个空df
type_dfs[str(k)]=spark.createDataFrame(sc.emptyRDD(),schema)
类型_dfs
#{'DateType':数据框[date:date],
#“StringType”:数据帧[s1:string,s2:string],
#“LongType”:数据帧[i1:bigint,i2:bigint]}
最后,我们可以通过访问以下类型的每个项来使用生成的数据帧:

type_dfs['StringType'].printSchema()
#根
#|--s1:字符串(nullable=true)
#|--s2:string(nullable=true)

从您的问题来看,不清楚您想要实现什么目标。您能否对此进行扩展,或者提供一个更好的示例?您是否可以添加带有数据类型的示例数据以及您期望的输出?