从单独的文件中火花读取架构

时间:2020-03-11 04:30:57

标签: apache-spark pyspark apache-spark-sql

我将数据存储在HDFS中,并将其存储在MySQL中。我能够将架构提取到DataFrame,如下所示:

col1,string
col2,date
col3,int
col4,string

如何从HDFS读取数据时读取此架构并将其分配给数据?

我将从MySql中读取架构。不同的数据集会有所不同。我需要一种动态的方法,对于任何数据集,我都可以从MySQL获取模式详细信息->将其转换为模式->然后应用于数据集。

1 个答案:

答案 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的实例,这将是您的最终模式。

相关问题