Loading [MathJax]/jax/input/TeX/config.js
社区首页 >问答首页 >如何在星火中创建架构文件

如何在星火中创建架构文件
EN

Stack Overflow用户
提问于 2018-05-23 20:08:55
回答 4查看 6.7K关注 0票数 5

我正在尝试读取一个Schema文件(这是一个文本文件),并将它应用到我的CSV文件中,而没有头文件。因为我已经有了一个模式文件,所以我不想使用InferSchema选项,这是一种开销。

我的输入模式文件如下,

代码语言:javascript
代码运行次数:0
复制
"num IntegerType","letter StringType"

我正在尝试下面的代码来创建一个模式文件,

代码语言:javascript
代码运行次数:0
复制
val schema_file = spark.read.textFile("D:\\Users\\Documents\\schemaFile.txt")
val struct_type = schema_file.flatMap(x => x.split(",")).map(b => (b.split(" ")(0).stripPrefix("\"").asInstanceOf[String],b.split(" ")(1).stripSuffix("\"").asInstanceOf[org.apache.spark.sql.types.DataType])).foreach(x=>println(x))

我得到的错误如下

代码语言:javascript
代码运行次数:0
复制
Exception in thread "main" java.lang.UnsupportedOperationException: No Encoder found for org.apache.spark.sql.types.DataType
  • 字段(类:"org.apache.spark.sql.types.DataType",名称:"_2") -根类:"scala.Tuple2“

并尝试将其作为模式文件使用,同时使用如下所示的spark.read.csv并将其写入ORC文件

代码语言:javascript
代码运行次数:0
复制
  val df=spark.read
      .format("org.apache.spark.csv")
      .option("header", false)
      .option("inferSchema", true)
      .option("samplingRatio",0.01)
      .option("nullValue", "NULL")
      .option("delimiter","|")
      .schema(schema_file)
      .csv("D:\\Users\\sampleFile.txt")
      .toDF().write.format("orc").save("D:\\Users\\ORC")

需要帮助将文本文件转换为架构文件,并将输入的CSV文件转换为ORC。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-05-23 21:29:20

若要从text文件创建架构,请创建一个match type函数,并将DataType返回为

代码语言:javascript
代码运行次数:0
复制
def getType(raw: String): DataType = {
  raw match {
    case "ByteType" => ByteType
    case "ShortType" => ShortType
    case "IntegerType" => IntegerType
    case "LongType" => LongType
    case "FloatType" => FloatType
    case "DoubleType" => DoubleType
    case "BooleanType" => BooleanType
    case "TimestampType" => TimestampType
    case _ => StringType
  }
}

现在,通过将架构文件读取为

代码语言:javascript
代码运行次数:0
复制
val schema = Source.fromFile("schema.txt").getLines().toList
  .flatMap(_.split(",")).map(_.replaceAll("\"", "").split(" "))
  .map(x => StructField(x(0), getType(x(1)), true))

现在,将csv文件读入

代码语言:javascript
代码运行次数:0
复制
spark.read
  .option("samplingRatio", "0.01")
  .option("delimiter", "|")
  .option("nullValue", "NULL")
  .schema(StructType(schema))
  .csv("data.csv")

希望这能有所帮助!

票数 6
EN

Stack Overflow用户

发布于 2020-10-08 02:02:37

您可以以以下格式创建名为schema.json的JSON文件

代码语言:javascript
代码运行次数:0
复制
{
  "fields": [
    {
      "metadata": {},
      "name": "first_fields",
      "nullable": true,
      "type": "string"
    },
    {
      "metadata": {},
      "name": "double_field",
      "nullable": true,
      "type": "double"
    }
  ],
  "type": "struct"
}

从读取此文件中创建结构架构

代码语言:javascript
代码运行次数:0
复制
rdd = spark.sparkContext.wholeTextFiles("s3://<bucket>/schema.json")
text = rdd.collect()[0][1]
dict = json.loads(str(text))
custom_schema = StructType.fromJson(dict)

之后,可以使用struct作为模式来读取csv文件。

代码语言:javascript
代码运行次数:0
复制
val df=spark.read
      .format("org.apache.spark.csv")
      .option("header", false)
      .option("inferSchema", true)
      .option("samplingRatio",0.01)
      .option("nullValue", "NULL")
      .option("delimiter","|")
      .schema(custom_schema)
      .csv("D:\\Users\\sampleFile.txt")
      .toDF().write.format("orc").save("D:\\Users\\ORC")
票数 6
EN

Stack Overflow用户

发布于 2019-01-13 14:35:01

像这样的东西更健壮一些,因为它使用了蜂巢亚稳态:

代码语言:javascript
代码运行次数:0
复制
    import org.apache.hadoop.hive.metastore.api.FieldSchema
    def sparkToHiveSchema(schema: StructType): List[FieldSchema] ={
        schema.map(field => new FieldSchema(field.name,field.dataType.catalogString,field.getComment.getOrElse(""))).toList
    }
``
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50500804

复制
相关文章
如何在Linux中创建文件?多个文件创建操作命令。
如果文件file1.txt不存在,则上面的命令将创建该文件,否则,它将更改其时间戳。
用户5005176
2021/08/10
39K0
如何在windows下和linux下获取文件(如exe文件)的详细信息和属性
最近在项目开发中,由cs开发的exe的程序,需要自动升级,该exe程序放在linux下,自动升级时检测不到该exe程序的版本号信息,但是我们客户端的exe程序需要获取服务器上新程序的版本号信息。最后由我用java实现linux上exe文件的版本号读取功能。下面是详细代码:
业余草
2019/01/21
6K0
如何在windows下和linux下获取文件(如exe文件)的详细信息和属性
如何在Java中创建临时文件?
在Java程序中,有时需要创建临时文件来暂存数据或者执行某些操作。Java提供了许多方式来创建临时文件。在本教程中,我们将介绍如何使用Java标准库来创建临时文件。
网络技术联盟站
2023/04/19
1.8K0
如何在Java中创建临时文件?
如何在 Linux 中创建带有特殊字符的文件?
在 Linux 系统中,创建文件是进行各种操作的基础。有时候,我们需要创建带有特殊字符的文件,例如包含空格、特殊符号或非ASCII字符的文件。本文将详细介绍在 Linux 中如何创建带有特殊字符的文件,以便您能够轻松地完成这样的任务。
网络技术联盟站
2023/07/14
7050
如何在 Linux 中创建带有特殊字符的文件?
如何在 Linux 上创建共享 VxFS 文件系统?
VxFS(Veritas File System)是一种高性能的日志文件系统,常用于企业级存储环境。在Linux系统中,您可以使用Veritas Volume Manager(VxVM)和Veritas File System(VxFS)软件来创建和管理VxFS文件系统。本文将详细介绍如何在Linux上创建共享VxFS文件系统。
网络技术联盟站
2023/06/20
5650
如何在 Linux 上创建共享 VxFS 文件系统?
如何在 Linux 中创建带有特殊字符的文件?
在 Linux 系统中,创建文件是进行各种操作的基础。有时候,我们需要创建带有特殊字符的文件,例如包含空格、特殊符号或非ASCII字符的文件。本文将详细介绍在 Linux 中如何创建带有特殊字符的文件,以便您能够轻松地完成这样的任务。
网络技术联盟站
2023/08/03
8020
如何在 Linux 中创建带有特殊字符的文件?
【DB笔试面试511】如何在Oracle中写操作系统文件,如写日志?
可以利用UTL_FILE包,但是,在此之前,要注意设置好UTL_FILE_DIR初始化参数。
AiDBA宝典
2019/09/30
28.8K0
【DB笔试面试511】如何在Oracle中写操作系统文件,如写日志?
如何在linux服务上创建samba文件共享服务
service smb status/stop/start/restart smb服务的状态开启停止重启
java攻城狮
2020/10/10
3.3K0
如何在linux服务上创建samba文件共享服务
如何在linux中使用终端命令行创建文件
使用touch命令创建文件 在 Linux 中创建新文件的最简单方法是使用 touch 命令。 在终端窗口中,输入以下内容: touch test.txt 这将创建一个名为test.txt的新空文件。你可以通过输入看到它: ls 该ls命令列出当前目录的内容。由于没有指定其他目录,因此该touch 命令在当前目录中创建了文件。 使用 touch 命令创建文件 如果已经有一个具有你选择的名称的文件,该touch命令将更新时间戳。 使用重定向运算符创建新文件 重定向运算符是用于更改显示结果的目的地的字符的名
入门笔记
2022/06/02
4.2K0
如何在linux中使用终端命令行创建文件
如何在 Windows 10上创建和运行批处理文件
在 Windows 10 上,批处理文件是一种特殊的文本文件,通常具有。Bat 扩展,它包含一个或多个命令,命令提示符可以理解并依次运行以执行各种操作。
披头
2020/12/15
28.6K0
如何在 Windows 10上创建和运行批处理文件
如何在 Vue3 中创建和使用单文件组件?
Vue3 是一种流行的 JavaScript 框架,它提供了创建单文件组件(Single File Components,SFC)的方式。单文件组件是一种将模板、脚本和样式封装在一个文件中的开发模式,可以提高代码的可读性和维护性。本文将详细介绍如何在 Vue3 中创建和使用单文件组件。
网络技术联盟站
2023/07/05
6640
【架构设计】酒店预订应用程序的系统设计架构(如 Airbnb、OYO)
Airbnb、Booking.com 和 OYO 等酒店预订应用程序如何提供从酒店列表到预订再到付款的流畅流程?而且都没有一个小故障!在此博客中,您将获得对此的详细解释。 由于它们非常庞大,以至于它们需要处理大量的用户流量。所以要管理这些,我们必须遵循微服务架构。这意味着我们必须为每种类型的任务将系统分成小块。 让我们一一了解流程。我把它分成了4个部分:
架构师研究会
2022/05/11
1.4K0
【架构设计】酒店预订应用程序的系统设计架构(如 Airbnb、OYO)
如何在js中创建对象
七夕临近了,没有对象的来创建一个吧 使用对象字面量: const o = { name: "zehan", greeting() { return `Hi, 我是${this.name}`; } }; o.greeting(); // "Hi, zehan" 使用构造函数: function Person(name) { this.name = name; } Person.prototype.greeting = function () { return `Hi, 我是
ZEHAN
2020/09/23
7.6K0
如何在Dynamo中创建UI
本文介绍了如何在Dynamo中创建UI,通过使用WPF技术实现了窗口的创建和交互。首先介绍了IronPython和Dynamo的基础知识,然后讲解了实现原理和准备工作。最后通过具体的操作步骤和代码示例讲解了如何在Dynamo中创建UI。
企鹅号小编
2018/01/05
2.1K0
如何在Dynamo中创建UI
如何在Mac中创建MiniKube
Minikube是一个工具,可以在本地轻松运行Kubernetes。 Minikube在笔记本电脑的VM中运行单节点Kubernetes集群,供希望尝试Kubernetes或日常开发的用户使用。
方志朋
2022/05/08
2.4K0
如何在Mac中创建MiniKube
Xcode 6之后创建PCH文件引创建PCH文件
在开发过程中,我们经常会在很多地方调用相同的内容。比如说我们设置控件位置时获取屏幕的宽高来适配,又比如说我们自己定义的一个转换颜色的消防法,还有各种头文件。这些常常使用到的内容,如果要在每一次要使用的时候都重复调用一次头文件或者声明一个方法,无疑是很低效的,而且也会很烦= =,而PCH文件就是解决这个问题的。
Cloudox
2021/11/23
1.2K0
Xcode 6之后创建PCH文件引创建PCH文件
ORA-27040: 文件创建错误, 无法创建文件
SQL 错误: ORA-01119: 创建数据库文件 ' F:\oracle\product\10.2.0\oradata\orcl\GIMSsS.dbf' 时出错 ORA-27040: 文件创建错误, 无法创建文件 OSD-04002: 无法打开文件 O/S-Error: (OS 123) 文件名、目录名或卷标语法不正确。 01119. 00000 - "error in creating database file '%s'" *Cause: Usually due to not having enough space on the device. *Action:
西门呀在吹雪
2020/11/09
4.3K0
ORA-27040: 文件创建错误, 无法创建文件
如何在大厂做好架构演进?
新瓶旧酒原则:使用新的技术来解决老的问题或者老的复杂度,不要为了尝试新技术而演进。
JavaEdge
2023/04/12
2770
如何在大厂做好架构演进?
如何在 WordPress 中创建联系表格?
假设我们有一个 WordPress 网站,并且我们想要添加一个功能,让他们可以联系他们所拥有的查询。我们可以通过使用网站上的 WordPress 插件添加联系表格来做到这一点。因此,这将为你的访问者提供一种与你联系的方式,当他们需要帮助或有什么要分享的时候。
海拥
2022/12/19
2.9K0
如何在 WordPress 中创建联系表格?
点击加载更多

相似问题

从xml文件创建星型架构数据库

26

如何为星火中的结构数组创建架构?

20

如何创建星型架构基准(SSB)表?

07

在MySQL中创建“类DWH”星型架构

15

SQLAlchemy中星型架构

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文