我将数据存储在HDFS中,并将其存储在MySQL中。我能够将架构提取到DataFrame,如下所示:
col1,string
col2,date
col3,int
col4,string
如何从HDFS读取数据时读取此架构并将其分配给数据?
我将从MySql中读取架构。不同的数据集会有所不同。我需要一种动态的方法,对于任何数据集,我都可以从MySQL获取模式详细信息->将其转换为模式->然后应用于数据集。
答案 0 :(得分:0)
您可以使用内置的pyspark函数_parse_datatype_string:
from pyspark.sql.types import _parse_datatype_string
df = spark.createDataFrame([
["col1,string"],
["col3,int"],
["col3,int"]
], ["schema"])
str_schema = ",".join(map(lambda c: c["schema"].replace(",", ":") , df.collect()))
# col1:string,col3:int,col3:int
final_schema = _parse_datatype_string(str_schema)
# StructType(List(StructField(col1,StringType,true),StructField(col3,IntegerType,true),StructField(col3,IntegerType,true)))
_parse_datatype_string
需要一个DDL格式的字符串,即col1:string, col2:int
,因此我们需要先用,
替换:
,然后再将所有连接在一起并以逗号分隔。该函数将返回StructType
的实例,这将是您的最终模式。