要将架构传递给json文件,我们可以这样做:

from pyspark.sql.types import (StructField, StringType, StructType, IntegerType)
data_schema = [StructField('age', IntegerType(), True), StructField('name', StringType(), True)]
final_struc = StructType(fields = data_schema)
df =spark.read.json('people.json', schema=final_struc)

上面的代码按预期工作。但是现在,我在表中有显示的数据,其显示方式为:
df = sqlContext.sql("SELECT * FROM people_json")

但是,如果我尝试通过使用以下命令将新模式传递给它,则它将无法正常工作。
df2 = spark.sql("SELECT * FROM people_json", schema=final_struc)

它给出以下错误:



注意:我正在使用Databrics Community Edition
  • 我想念什么?
  • 如果表中有数据而不是某些JSON文件,如何传递新模式?
  • 最佳答案

    您不能将新架构应用于已创建的数据框。但是,您可以通过强制转换为另一种数据类型来更改每列的架构,如下所示。

    df.withColumn("column_name", $"column_name".cast("new_datatype"))
    

    如果需要应用新的架构,则需要转换为RDD并再次创建一个新的数据框,如下所示
    df = sqlContext.sql("SELECT * FROM people_json")
    val newDF = spark.createDataFrame(df.rdd, schema=schema)
    

    希望这可以帮助!

    10-01 20:21
    查看更多