如何将字符串格式的PySpark Schema转换并创建DataFrame
解决字符串格式Schema创建Spark DataFrame的问题
直接将字符串格式的Schema传入createDataFrame会报错,因为schema参数需要接收StructType实例,而非字符串类型。以下是可行的解决步骤:
步骤1:导入Spark数据类型
首先确保导入所需的Spark SQL类型:
from pyspark.sql.types import StructType, StructField, StringType, IntegerType
步骤2:将字符串Schema转换为StructType对象
利用Python的eval()函数,将字符串形式的Schema代码转换为实际的StructType实例:
schema_str = """StructType([StructField("firstname",StringType(),True),StructField("middlename",StringType(),True),StructField("lastname",StringType(),True), StructField("id", StringType(), True),StructField("gender", StringType(), True),StructField("salary", IntegerType(), True)])""" # 转换字符串为Schema对象 schema = eval(schema_str)
步骤3:创建DataFrame
使用转换后的Schema对象创建DataFrame:
data2 = [ ("James","","Smith","36636","M",3000), ("Michael","Rose","","40288","M",4000), ("Robert","","Williams","42114","M",4000), ("Maria","Anne","Jones","39192","F",4000), ("Jen","Mary","Brown","","F",-1) ] df = sqlContext.createDataFrame(data=data2, schema=schema) # 验证结果 df.show()
说明
eval()会执行字符串中的Python代码,将原本只是文本的Schema定义转换为Spark能识别的StructType对象,这样就能正确匹配数据结构创建DataFrame了。
内容的提问来源于stack exchange,提问作者Abhik NASKAR
相关产品推荐
相关产品推荐

