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

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 特效。 解决思路 指定可

  • 这里有一个drools新手,下面是java类结构。 我必须编写一些代码来验证drools中的PersonalAddress。规则1。如果person有PersonalAddress实例列表,如果其中一个是AddressType==当前和timeAtAddress 规则2。如果上述条件为true,那么我想获取PersonalAddress实例,其中AddressType==PREVIOUS, Dro