当前位置: 首页 > 知识库问答 >
问题:

加载带有模式信息的文件并使用Spark动态应用于数据文件

慕容康安
2023-03-14

我不想使用推断架构和标题选项。唯一的方法是我应该读取一个只包含列标题的文件,并且应该动态地使用它来创建数据帧。

我使用Spark 2和来加载带有用户定义模式的单个csv文件,但我希望动态处理此问题,以便在我只提供模式文件的路径后,它将读取该路径并将其用作数据的标头,并使用模式文件中提供的模式将其转换为数据帧。

假设我提供的文件夹中包含2个文件。一个文件将只有数据,标头不是强制性的。第二个文件将具有模式(列名)。所以我必须先读取模式文件,然后是包含数据的文件,并且必须将模式应用于数据文件并在数据帧中显示。

小示例,schema。txt包含:

Custid,Name,Product

而数据文件有:

1,Ravi,Mobile

共有1个答案

宇文飞翮
2023-03-14

根据您的评论,我假设模式文件只包含列名,并且格式类似于csv文件(列名作为标题,没有任何数据)。列类型将从实际数据文件中推断出来,而不是由架构文件指定。

在这种情况下,最简单的解决方案是将模式文件作为csv读取,将header设置为true。这将提供一个空的数据帧,但标题正确。然后读取数据文件并将默认列名更改为架构数据框架中的列名。

val schemaFile = ...
val dataFile = ...    

val colNames = spark.read.option("header", true).csv(schemaFile).columns
val df = spark.read
  .option("header", "false")
  .option("inferSchema", "true")
  .csv(dataFile)
  .toDF(colNames: _*)
 类似资料:
  • 我是Spark的新手,我正在尝试使用Spark从文件中读取CSV数据。以下是我正在做的: 我希望这个调用会给我一个文件前两列的列表,但我遇到了以下错误: 索引器中第1行的文件“”:列表索引超出范围 虽然我的CSV文件不止一列。

  • 我想使用Spark Session2.2从HDFS中的Excel文件加载数据。下面是我的Java代码和我得到的异常。 我有个例外: java.lang.nosuchmethoderror:org.apache.poi.ss.usermodel.workbook.close()V at com.crealytics.spark.excel.excelrelation.com$crealytics$s

  • 本文向大家介绍使用javaScript动态加载Js文件和Css文件,包括了使用javaScript动态加载Js文件和Css文件的使用技巧和注意事项,需要的朋友参考一下 JS动态加载CSS 在可换主题的界面中具有很重要的意义,用户可以根据自己的浏览习惯选择自己喜欢的页面显示方式,下面详细说明。 希望下面的方法对你有帮助。 (1)使用JavaScript动态加载Js文件 (2)使用JavaScript

  • 我正在从Cloudera包裹中运行带有Spark 0.9.0的CDH 4.4。 我有一堆Avro文件是通过Pig的AvroStorage UDF创建的。我想在 Spark 中加载这些文件,使用通用记录或载入 Avro 文件的架构。到目前为止,我已经尝试过这个: 这适用于一个文件,但它不能扩展——我将所有数据加载到本地RAM中,然后从那里跨spark节点分发。

  • 问题内容: 我已经编写了一个PropertyUtils类(来自互联网),它将加载属性 而PropertiesUtil类如下所示 稍后,我可以通过调用PropertiesUtil.getProperty()方法来获取属性。 但是现在我要稍作修改,以便如果myApp.properties被用户修改/更改,则应再次加载 可能我需要FileWatcher类 但我的怀疑是 如何使用classpath:myA

  • 我已经写了一个PropertyUtils类(来自互联网),它将加载属性 PropertiesUtil类如下所示 稍后,我可以通过调用PropertiesUtil来获取属性。getProperty()方法。 但现在我想稍微修改一下,如果myApp。属性被用户修改/更改,应该重新加载 可能我需要FileWatcher类 但我的疑虑是 如何使用classpath创建File对象:myApp/myApp.