gpt4 book ai didi

scala - 如何在 Spark 中创建一个空的数据帧

转载 作者:行者123 更新时间:2023-12-03 22:57:50 25 4
gpt4 key购买 nike

我有一组基于 Avro 的配置单元表,我需要从中读取数据。由于 Spark-SQL 使用 hive serdes 从 HDFS 读取数据,因此比直接读取 HDFS 慢得多。所以我使用数据砖 Spark-Avro jar 从底层 HDFS 目录读取 Avro 文件。

一切正常,除非 table 是空的。我已设法使用以下命令从 hive 表的 .avsc 文件中获取架构,但出现错误“ 未找到 Avro 文件

val schemaFile = FileSystem.get(sc.hadoopConfiguration).open(new Path("hdfs://myfile.avsc"));

val schema = new Schema.Parser().parse(schemaFile);

spark.read.format("com.databricks.spark.avro").option("avroSchema", schema.toString).load("/tmp/myoutput.avro").show()

解决方法:

我在该目录中放置了一个空文件,同样的事情也能正常工作。

有没有其他方法可以实现相同的目标?比如conf设置之类的?

最佳答案

您不需要使用 emptyRDD。以下是 PySpark 2.4 对我有用的方法:

empty_df = spark.createDataFrame([], schema) # spark is the Spark Session

如果您已经有来自另一个数据帧的架构,您可以这样做:
schema = some_other_df.schema

如果不这样做,则手动创建空数据框的架构,例如:
schema = StructType([StructField("col_1", StringType(), True),
StructField("col_2", DateType(), True),
StructField("col_3", StringType(), True),
StructField("col_4", IntegerType(), False)]
)

我希望这有帮助。

关于scala - 如何在 Spark 中创建一个空的数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50606520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com