Spark 2.2 Scala DataFrame 从字符串数组中选择,捕获错误

2023-12-04

我是 SparkSQL/Scala 的新手,正在努力完成一些看似简单的任务。

我正在尝试从 Scala 字符串数组构建一些动态 SQL。我正在尝试在 DataFrame 中重新输入一些列,但直到运行时我才能看到 DataFrame 中的列集时,我才会确切地知道需要重新输入哪些列。所以我正在尝试这样做:

val cols = df.columns
val typedCols = cols.map( c => getTypedColumn(c) )
df.select( ...)  or df.selectExpr(...) // how to invoke this with vals from my string array??

typedCols 最终将成为一个字符串数组,其值如下:

["a", "cast(b as int) b", "c"]

我是否需要首先从该数组创建一个大的逗号分隔字符串?

因此,假设这可行,我将调用该 select 语句,它会将我的 DataFrame 转换为具有我所需类型的新 DataFrame。但是 DataFrame 中的某些记录将出现错误,并且尝试重新输入将失败。

如何获得包含通过输入的所有良好记录的 DataFrame 结果,然后将所有不良记录放入某种错误存储桶中?在尝试 DataFrame 选择之前,我是否需要先进行验证?


您可以只使用可变参数:

val df = Seq(("a", "1", "c"), ("foo", "bar", "baz")).toDF("a", "b", "c")
val typedCols = Array("a", "cast(b as int) b", "c")
df.selectExpr(typedCols: _*).show

+---+----+---+
|  a|   b|  c|
+---+----+---+
|  a|   1|  c|
|foo|null|baz|
+---+----+---+

但我个人更喜欢专栏:

val typedCols = Array($"a", $"b" cast "int", $"c")
df.select(typedCols: _*).show

如何获得包含通过输入的所有良好记录的 DataFrame 结果,然后将所有不良记录放入某种错误存储桶中?

失败的数据cast is NULL。要找到好的记录,请使用na.drop:

val result = df.selectExpr(typedCols: _*)
val good = result.na.drop()

查找空头支票是否有NULL

import org.apache.spark.sql.functions.col

val bad = result.where(result.columns.map(col(_).isNull).reduce(_ || _))

要获取不匹配的数据:

  • If typedCols are Seq[Column] you can

    df.where(typedCols.map(_.isNull).reduce(_ || _))  
    
  • If typedCols are Seq[String]你可以:

    import org.apache.spark.sql.functions.expr
    
    df.where(typedCols.map(expr(_).isNull).reduce(_ || _))  
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spark 2.2 Scala DataFrame 从字符串数组中选择,捕获错误 的相关文章

随机推荐

  • 在 Win7 中使用 MinGW 中的 pthreads

    2015年1月20日 我在Win7中使用MinGW 尝试使用MinGW和Pthreads编译我的源代码 MinGW已经支持POSIX线程 在 MinGW安装管理器 中 我们可以安装pthreads开发包和pthreads lib 但是当我编
  • 在Python中,命令行参数无需导入?

    在Python中 是否可以在不导入sys 或任何其他模块 的情况下获取命令行参数 是的 如果您使用的是 Linux 如果您知道进程 ID 则可以读取它 proc pid cmdline文件 其中包含以 null 分隔的命令行参数列表 PRO
  • VBA Excel 变量对多个键/顺序进行排序

    如何同时对多个列 键 订单 进行排序 当我运行下面的代码时 它会在执行每一行时对数据重新排序 而不是在排序中对多列进行排序 将 密钥 或 订单 编号从 1 更改为 2 等没有帮助 谢谢 wsLast Row Cells Rows Count
  • javascript数组的总和返回所有数字的字符串连接[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 目前不接受答案 我有一个由 ajax 获取的 php json encode 对象 我想做的就是对这个数组求和 这是我到目前为止所做的 var json parseJSON data var
  • 如何在Tensorflow中设置分层学习率?

    我想知道是否有一种方法可以像 Caffe 中那样对不同层使用不同的学习率 我正在尝试修改预先训练的模型并将其用于其他任务 我想要的是加快新添加层的训练速度 并将训练后的层保持在较低的学习率 以防止它们被扭曲 例如 我有一个 5 卷积层的预训
  • 当服务打开时,如何强制应用程序选择退出省电模式?

    预期的行为是应用程序在处于开启状态时将始终运行 当应用程序一段时间不活动时 某些手机会将应用程序置于后台模式 我希望应用程序始终运行 即使处于待机模式 待机模式意味着当我们按下主页按钮时 应用程序将进入后台 并且它将运行一段时间 我找到了以
  • 配置按键重复延迟以检测按键是否被按下

    我正在用 C 语言编写一个程序 它使用 ncurses 来检查是否按下了某个键 问题是按键重复有延迟 例如 如果我在终端中按住 a 键 则在重复输入 a 之前会有短暂的延迟 我希望能够知道它是否是从实际按下的位置按下的 在终端中如何暂时将此
  • opengles 在 iPhone 中显示人脸

    我需要将人类 2D 脸部制作为 3D 脸部 我用了这个链接加载 obj 文件并映射纹理 此示例仅适用于立方体和金字塔 我加载了人脸 obj 文件 This loads the obj file and can get the human f
  • Spring 对每个未经授权的 HTTP POST 返回 HTTP 405

    Spring 似乎没有正确路由 授权 HTTP POST 请求 当我发送 HTTP POST 请求时 我总是收到 405 Method Not allowed 响应 并在日志文件中显示 org springframework web ser
  • Jquery 数据表排序不适用于日期列?

    我有一个 jquery 数据表 其中日期列格式为 2018 年 2 月 16 日 但是当它排序时 它没有正确排序 我已经使用了提到的所有与日期相关的列类型Here 但似乎没有任何作用 我该如何解决 这是代码 div class panel
  • 列表追加到 pandas 单元格中

    我有一个数据框 其中包含列中的列表项 例子 df column1 column2 column3 1 c d 2 x 3 foo car 所以我想将另一个项目附加到第3列中 结果应该是这样的 column1 column2 column3
  • 如何使用 SimpleXML 解析 XML 并忽略错误

    我的 xml 文档经常包含错误 无论如何 我想解析我的文档直至出现错误或尝试自动修复错误 那可能吗 我已经尝试过这个 但它不起作用 xml simplexml load file url SimpleXMLElement array LIB
  • 基本矩阵的投影矩阵

    我已经获得了两个摄像机之间的基本矩阵 我也有他们的内部参数3 X 3我之前通过棋盘获得的矩阵 使用基本矩阵 我得到了P1 and P2 by P1 I 0 and P2 e x F e 这些投影矩阵对于获取精确的 3D 位置并没有真正的用处
  • 使用 python-pptx 从现有图表中读取图表数据

    我想使用 python pptx 库从演示文稿中的图表中读取数据 我已经看过替换图表数据的文档 但我不知道如何读取数据 图表数据为 图表的图表类型 它的类别名称 以及可能的层次结构 它的系列名称 及其系列值 这些可在绘图级别使用 例如 gt
  • 如何将 Objective-C 函数作为回调传递给 C 函数?

    我想从 Objective C 调用 C 函数并将 Objective C 函数作为回调传递 问题是这个函数有一个回调作为参数 所以我必须将 Objective C 函数作为回调传递给 c 函数 这是c函数的头文件 struct mg co
  • 带有上传附件选项的文本区域 HTML/JQuery

    我创建了文本区域 允许用户输入文本 如下所示
  • Microsoft VS C++ 编译器可以从临时对象初始化引用是否是一个错误[重复]

    这个问题在这里已经有答案了 可能的重复 将临时绑定到左值引用 使用VS2008 C 编译器 编译代码无编译错误 class A int main A a ref A return 0 我相信 C 标准 C 2003 和即将推出的 C 0x
  • R:条形图高度必须是向量或矩阵[重复]

    这个问题在这里已经有答案了 我正在尝试使用分组条形图制作条形图 但出现此错误 高度 必须是向量或矩阵 我不知道为什么 我的代码是 rebDef sample 50 100 14 replace F rebOf sample 20 40 14
  • 如何让模拟器与我的电脑处于同一网络?

    我在 NET 4 Visual Studio 2010 中创建了一些 Web API 方法 现在已将其移植到 VS 2013 RC 我想使用 RestSharp 从 Windows CE Compact Framework 应用程序中使用它
  • Spark 2.2 Scala DataFrame 从字符串数组中选择,捕获错误

    我是 SparkSQL Scala 的新手 正在努力完成一些看似简单的任务 我正在尝试从 Scala 字符串数组构建一些动态 SQL 我正在尝试在 DataFrame 中重新输入一些列 但直到运行时我才能看到 DataFrame 中的列集时