Spark 数据框列命名约定/限制

2024-01-06

我现在多次遇到 (Py)Spark 列名称的默认命名(从收到的 .csv 文件导入)的问题。混合大小写和 .或 - 在列名称中。所以我决定找出实际保存的列名,并发现以下内容:

这个网站 https://medium.com/@an_chee/why-using-mixed-case-field-names-in-hive-spark-sql-is-a-bad-idea-95da8b6ec1e0似乎建议仅使用小写名称:

Hive 在 Hive Metastore 中以小写形式存储表、字段名称。 Spark 保留 Dataframe、Parquet 文件中字段名称的大小写。 使用 Spark SQL 创建/访问表时,Spark 将详细信息存储在表属性(在 hive 元存储中)中,从而保留区分大小写。当使用 Hive Metastore 通过 Spark SQL 访问镶木地板记录时,这会导致奇怪的行为。

亚马逊雅典娜 https://docs.aws.amazon.com/athena/latest/ug/tables-databases-columns-names.html似乎证实了这一点,并补充说“_”是唯一的保存特殊字符:

...但是 Spark 需要小写的表名和列名。

Athena 表、视图、数据库和列名称不能包含特殊名称 字符,下划线 (_) 除外。

我从中得出的结论是,如果可能的话,我应该尝试仅使用小写列名,并使用 _ 作为单词之间的分隔符,以确保与 Spark 工作流程中可能出现的工具的最大交叉兼容性。它是否正确?是否有理由更喜欢空格而不是下划线,还有其他需要考虑的吗?

我意识到,在很多情况下,我might将所有列重命名为上述模式时做得太过分了 - 但是,我宁愿避免在项目中间遇到与命名相关的麻烦,因为我发现这些错误有时很难调试。


将文件保存为 Parquet 格式时,不能使用空格和某些特定字符。我在读取 CSV 和写入 Parquet 时遇到了类似的问题。下面的代码为我解决了这个问题:

# Column headers: lower case + remove spaces and the following characters: ,;{}()=  
newColumns = []
problematic_chars = ',;{}()='
for column in df.columns:
    column = column.lower()
    column = column.replace(' ', '_')
    for c in problematic_chars:
        column = column.replace(c, '')
    newColumns.append(column)
df = df.toDF(*newColumns)

所以是的,如果您的目标是确保最大的交叉兼容性,您应该确保您的列名全部小写,仅使用 _ 作为分隔符。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spark 数据框列命名约定/限制 的相关文章

  • 项目组织和命名约定

    这在某种程度上是后续每个模块组件重复模块名称 https stackoverflow com questions 25005897 repeating module name for each module component问题 我们决定
  • 无法启动 Spark-Shell

    我使用的是 Spark 1 4 1 我可以毫无问题地使用spark submit 但当我跑的时候 spark bin spark shell 我收到以下错误 我已经配置了SPARK HOME and JAVA HOME 不过 Spark 1
  • 为什么spark.memory.fraction的默认值这么低?

    来自Spark配置文档 https spark apache org docs latest configuration html memory management 我们了解以下有关spark memory fraction配置参数 用于
  • 如何使用 with open 在 pySpark 中打开存储在 HDFS 中的文件

    如何打开存储在 HDFS 中的文件 这里输入文件来自 HDFS 如果我按如下方式提供文件 我将无法打开 它将显示为找不到文件 from pyspark import SparkConf SparkContext conf SparkConf
  • 在 Spark 中将流式 XML 转换为 JSON

    我是 Spark 新手 正在开发一个简单的应用程序 将从 Kafka 接收的 XML 流转换为 JSON 格式 Using 火花2 4 5 斯卡拉 2 11 12 在我的用例中 kafka 流采用 xml 格式 以下是我尝试过的代码 val
  • 按年份进行透视并获取 2020 年以来的金额总和

    我有这样的数据 我想按年份旋转并仅显示 2020 年以来的总数 我该如何实现这一目标 您可以使用以下方法实现此目的PIVOT https spark apache org docs 3 2 1 api python reference ap
  • createOrReplaceTempView 在 Spark 中如何工作?

    我是 Spark 和 Spark SQL 的新手 如何createOrReplaceTempView在 Spark 工作 如果我们注册一个RDD对象作为表 Spark 会将所有数据保留在内存中吗 createOrReplaceTempVie
  • Spark Streaming 中是否需要检查点

    我注意到 Spark 流示例也有检查点代码 我的问题是检查点有多重要 如果是为了容错 那么在此类流应用程序中发生故障的频率是多少 这一切都取决于您的用例 假设您正在运行一个流作业 它仅从 Kafka 读取数据并计算记录数 如果您的应用程序在
  • 将 Spark 添加到 Oozie 共享库

    默认情况下 Oozie 共享 lib 目录提供 Hive Pig 和 Map Reduce 的库 如果我想在 Oozie 上运行 Spark 作业 最好将 Spark lib jar 添加到 Oozie 的共享库 而不是将它们复制到应用程序
  • 在 Databricks / Spark 中的 SQL 中为变量分配动态值

    我觉得我一定在这里遗漏了一些明显的东西 但我似乎无法在 Spark SQL 中动态设置变量值 假设我有两张桌子 tableSrc and tableBuilder 我正在创建tableDest 我一直在尝试变体 SET myVar FLOA
  • Apache Spark 何时发生混洗?

    我正在优化 Spark 中的参数 并且想确切地了解 Spark 是如何对数据进行洗牌的 准确地说 我有一个简单的字数统计程序 并且想知道spark shuffle file buffer kb如何影响运行时间 现在 当我将此参数设置得非常高
  • 如何在 AWS Glue 中指定联接类型?

    我正在使用 AWS Glue 连接两个表 默认情况下 它执行INNER JOIN 我想做一个LEFT OUTER JOIN 我参考了 AWS Glue 文档 但无法将联接类型传递给Join apply 方法 有没有办法在 AWS Glue
  • 在 Spark 2.4 上的 pyspark.sql.functions.max().over(window) 上使用 .where() 会引发 Java 异常

    我关注了一个帖子堆栈溢出 https stackoverflow com questions 48829993 groupby column and filter rows with maximum value in pyspark 488
  • Spark SQL/Hive 查询通过 Join 永远持续下去

    所以我正在做一些应该很简单的事情 但显然它不在 Spark SQL 中 如果我在 MySQL 中运行以下查询 查询将在不到一秒的时间内完成 SELECT ua address id FROM user u inner join user a
  • Func 方法参数的首选命名约定是什么?

    我承认这个问题是主观的 但我对社区的观点感兴趣 我有一个缓存类 它采用类型的缓存加载器函数Func
  • 与文件名中的冒号“:”作斗争

    我有以下代码 用于加载大量 csv gz 并将它们转储到其他文件夹中 并将源文件名作为一列 object DailyMerger extends App def allFiles path File List File val parts
  • 如何命名泛型类的 C# 源文件

    我试图坚持通用命名约定 例如中描述的那些开发类库的设计指南 http msdn microsoft com en us library ms229042 aspx 我将每种类型放入其自己的源文件中 并且部分类将拆分为多个文件 如问题中所述部
  • 使用 Pyspark 从 S3 读取时,内容长度分隔消息正文过早结束 SparkException

    我正在使用下面的代码来阅读S3 csv 文件从我的本地机器 from pyspark import SparkConf SparkContext from pyspark sql import SparkSession import con
  • Spark Dataframe 中的分析

    在这个问题中 我们有两个经理 M1 和 M2 在经理 M1 的团队中有两个员工 e1 和 e2 在 M2 的团队中有两个员工 e4 和 e5 以下是经理和员工的层次结构 1 M1 a e1 b e2 2 M2 a e4 b e5 我们有以下
  • Spark Dataframe/Parquet 中的枚举等效项

    我有一个包含数亿行的表 我想将其存储在 Spark 的数据帧中并作为 parquet 文件持久保存到磁盘 我的 Parquet 文件的大小现在超过 2TB 我想确保我已经对此进行了优化 这些列中很大一部分是字符串值 它们可能很长 但值通常也

随机推荐

  • cin 首次使用函数后不允许输入

    对于 C 或任何类型的编程来说都是全新的 我正在尝试进行简单的输入 输出 但是在回答第一个问题后 我没有机会输入第二个输入 我尝试过在网上查找内容 但考虑到这是一个非常简单的代码 据说哈哈 没有人遇到过同样的问题 这让我来到这里 inclu
  • 生产中的高超音速休眠?

    开发商高超音速 http hsqldb org 承诺提高绩效 但我担心使用 hsqlDB 的管理和其他方面会出现问题 有人在生产中使用这个吗 这是个好主意吗 许多公司 http hsqldb org web hsqlUsing html在生
  • 如何评估 WHERE 子句中的输入

    我正在我的一个变量中输入一个输入 基本上我想做一些类似的事情 SELECT FROM PEOPLE WHERE IF INPUT 1 ITEMID 16 OR ITEMID 13 ELSE IF INPUT 2 ITEMID 11 OR I
  • Java SFTP (apache vfs2) - 密码带有@

    我正在尝试使用 org apache commons vfs2 通过 SFTP 下载文件 问题是 密码包含 字符 因此这会导致 URI 被错误解析 org apache commons vfs2 FileSystemException Ex
  • 有没有办法只限制mysql中的较低范围?

    我想获取查询中除第一行之外的所有行 我怎样才能做到这一点 您可以使用大量行 偏移量为1 LIMIT 1 18446744073709551615
  • 为什么 JSON 列不能是唯一键?

    我有一个表 里面有一个名为ColumnName该列的数据类型是JSON 我正在努力让它成为unique key 但这是不可能的 我收到了这条消息 3152 JSON 列 columnName 不能在键规范中使用 我想了解为什么我不能将该列设
  • 在 SQL Server 中从 base64 字符串转换为 varbinary(max)

    我的表中以二进制形式存储了 PDF 文档 存储 PDF 字节的列是 typevarbinary max 我想要updateSQL Studio 中包含更新文档的一条记录 我尝试完成此操作的方式如下所示 UPDATE table SET fi
  • Azure 搜索是否支持拼写错误和同义词?

    我见过讨论这两个主题的线程 Azure 搜索是否处理同义词 https stackoverflow com questions 31180405 does azure search handle synonyms 搜索 API 中的模糊搜索
  • 没有简单组件的提供者

    直到 5 分钟前它才工作 这毫无意义 这是组件 import Component OnInit from angular core import Osobaa from osobaa import Osoba from osoba impo
  • RUBYLIB 环境路径

    所以目前我已将以下内容包含在我的 bashrc 文件中 export RUBYLIB home git project app helpers 我正在尝试使用具有以下规范的规范来运行 rspec require output helper
  • 在Python中读取csv文件时列出索引超出范围错误

    我有这段代码 我正在读取 csv 文件 使用NamedTemporaryFile更改 csv 文件的内容 def update localcsv ping Yes No filename file1 csv tempfile NamedTe
  • 发布 TypeScript 包时如何处理可选的对等依赖项?

    将 TypeScript 包发布到 npm 并提供接受来自一个对等依赖项或另一个对等依赖项的输入的函数时 如何定义可选的对等依赖项 import ExternalFoo from foo import ExternalBar from ba
  • 如何重写此 MySQL 查询,使其不会引发此错误:您无法在 FROM 子句中指定目标表“crawlLog”进行更新?

    我正在尝试从公司表中获取 id 但该 id 尚未出现在crawlLog 表中 然后我需要将该companyId 插入crawlLog 表中 我需要在一次调用中执行此操作 以便并行爬网程序在其他爬网程序选择了某个 url 但尚未将其插入爬网日
  • 如何在小窗口中打开“zxing条码”扫描屏?

    zxing Barcode 扫描仪在我的应用程序中成功运行 https github com journeyapps zxing android embedded https github com journeyapps zxing and
  • 如何优化elasticsearch percolator索引内存性能

    使用elasticsearch percolator索引时有没有办法提高内存性能 我为我的渗滤器创建了一个单独的索引 我有大约 1 000 000 个用户创建的已保存搜索 用于电子邮件警报 创建此渗透器索引后 我的堆使用率飙升至 100 并
  • 重新打开 gem 提供的 ActiveRecord 模型

    我正在尝试扩展 ActiveRecord 模型 Vote 那是一颗宝石 https github com peteonrails vote fu https github com peteonrails vote fu 提供给我的应用程序
  • “自动释放但没有池”是什么意思?

    我的应用程序结构如下 核心部分是用 C 编写的 并大量使用线程 我正在其上用 Objective C 开发 UI 如果我不执行线程 它工作正常 但我无法禁用 停止线程 UI 在日志中随机崩溃 我可以看到以下消息 NSAutoreleaseN
  • Spark:不支持的文字类型类 scala.collection.immutable.Nil$ List()

    我搜索了与这个问题相关的其他答案 但没有帮助 我正在尝试向数据框中添加一列 该列的数据类型为Seq CaseClass 起初我认为 Spark 可能不支持集合类型列 但事实并非如此 这是我尝试运行的代码示例 我只想向每一行添加一个空的 Se
  • 在没有标题的 UITabBarItem 上设置辅助功能标签

    我有一个像这样的 UITabBarItem Controller tabBarItem UITabBarItem alloc initWithTitle nil image nil tag 0 但是标题为 nil 会删除可访问性和 KIF
  • Spark 数据框列命名约定/限制

    我现在多次遇到 Py Spark 列名称的默认命名 从收到的 csv 文件导入 的问题 混合大小写和 或 在列名称中 所以我决定找出实际保存的列名 并发现以下内容 这个网站 https medium com an chee why usin