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

Spark Dataframe验证parquet写入的列名

夏锐藻
2023-03-14

我正在使用从JSON事件流转换而来的Dataframes处理事件,这些数据流最终被写为Parquet格式

但是,有些JSON事件在键中包含空格,我希望在将数据帧转换为Parquet之前记录并过滤/删除这些事件,因为;{}()\n\t=被认为是Parquet模式(CatalystSchemaConverter)中的特殊字符,如下面[1]所列,因此列名中不应允许。

我如何在Dataframe中对列名进行这样的验证,并在不出错的情况下完全删除这样的事件。

[1]Spark's CatalystSchemaConverter

def checkFieldName(name: String): Unit = {
  // ,;{}()\n\t= and space are special characters in Parquet schema
  checkConversionRequirement(
    !name.matches(".*[ ,;{}()\n\t=].*"),
    s"""Attribute name "$name" contains invalid character(s) among " ,;{}()\\n\\t=".
             |Please use alias to rename it.
           """.stripMargin.split("\n").mkString(" ").trim
  )
}

共有1个答案

涂选
2023-03-14

对于每个在Pyspark中经历过这种情况的人来说:这甚至发生在我重命名列之后。在一些迭代之后,我可以让它发挥作用的一种方法是:

file = "/opt/myfile.parquet"
df = spark.read.parquet(file)
for c in df.columns:
    df = df.withColumnRenamed(c, c.replace(" ", ""))

df = spark.read.schema(df.schema).parquet(file)

 类似资料:
  • 我正在使用这段代码验证我的标签 我检查了身份验证响应的结果,它等于我的包。身份验证后,我使用 Ndef 类的 方法编写 内容,但我无法编写。 这是我找到验证标签的方法的地方。 这是我的方法: 验证标记(使用该代码段) 如果身份验证响应等于我的包,请继续编写 NDEF 消息 然而,每当我调用< code>writeNdefMessage()时,我都会得到一个< code>java.io.IOExce

  • 根据经验,您永远不应该信任从最终用户收到的数据, 并且应该在充分利用之前对其进行验证。 要给 model 填充其所需的用户输入数据,你可以调用 yii\base\Model::validate() 方法验证它们。该方法会返回一个布尔值,指明是否通过验证。若没有通过,你能通过 yii\base\Model::$errors 属性获取相应的报错信息。比如, $model = new \app\mode

  • 环境 Glassfish 3.1.2内置Hibernate-Validator 4.2。

  • 实现效果 初始文档里仅仅提供了一个 script 标签,供我们从 Cornify.com 加载一个 JS 文件,调用其中的 cornify_add() 方法时,会在页面中追加 p 标签,并在 DOM 中插入一个图标。Cornify 的具体效果可以到官网首页去体验。 而这个挑战要实现的效果是,当在此页面完整输入了“暗号”(一串事先定义好的字符串)时,生成新的 Cornify 特效。 解决思路 指定可

  • 问题内容: 我是这个C ++世界的新手,正在尝试为数字密码编写输入验证功能。这是我到目前为止所得到的: 对于不正确的值,它工作得很好,但在有效输入时不会中断循环。知道我在这里缺少什么吗?干杯!! James Kanze脚本的ErroR: 新代码: 使用 和 验证作为字符串 感谢所有人(尤其是James Kanze)的帮助。这件事在这里很有效。 那里还有进一步改进的空间吗?干杯!! 问题答案: 这看