替换 csv 文件中的新行 (\n) 字符 - Spark scala

2023-11-24

为了说明问题,我采取了一个测试集 csv 文件。但在实际情况下,问题必须处理超过 TeraByte 的数据。

我有一个 CSV 文件,其中的列用引号括起来(“col1”)。但是当数据导入完成后。一列包含换行符 (\n)。当我想将它们保存为 Hive 表时,这给我带来了很多问题。

我的想法是用“|”替换\n字符管道中的火花。

到目前为止我取得了以下成就:

1. val test = sqlContext.load(
        "com.databricks.spark.csv",
        Map("path" -> "test_set.csv", "header" -> "true", "inferSchema" -> "true", "delimiter" -> "," , "quote" -> "\"", "escape" -> "\\" ,"parserLib" -> "univocity" ))#read a csv file

 2.   val dataframe = test.toDF() #convert to dataframe

  3.    dataframe.foreach(println) #print

    4. dataframe.map(row => {
        val row4 = row.getAs[String](4)
        val make = row4.replaceAll("[\r\n]", "|") 
        (make)
      }).collect().foreach(println) #replace not working for me

样本集:

(17 , D73 ,525, 1  ,testing\n    ,  90 ,20.07.2011 ,null ,F10 , R)
 (17 , D73 ,526, 1  ,null         ,  89 ,20.07.2011 ,null ,F10 , R)
 (17 , D73 ,529, 1  ,once \n again,  10 ,20.07.2011 ,null ,F10 , R)
 (17 , D73 ,531, 1  ,test3\n      ,  10 ,20.07.2011 ,null ,F10 , R)

预期结果集:

(17 , D73 ,525, 1  ,testing|    ,  90 ,20.07.2011 ,null ,F10 , R)
 (17 , D73 ,526, 1  ,null         ,  89 ,20.07.2011 ,null ,F10 , R)
 (17 , D73 ,529, 1  ,once | again,  10 ,20.07.2011 ,null ,F10 , R)
 (17 , D73 ,531, 1  ,test3|      ,  10 ,20.07.2011 ,null ,F10 , R)

对我有用的:

val rep = "\n123\n Main Street\n".replaceAll("[\\r\\n]", "|") rep: String = |123| Main Street|

但为什么我不能在元组的基础上做呢?

 val dataRDD = lines_wo_header.map(line => line.split(";")).map(row => (row(0).toLong, row(1).toString, 
                                               row(2).toLong, row(3).toLong, 
                                               row(4).toString, row(5).toLong,
                                               row(6).toString, row(7).toString, row(8).toString,row(9).toString)) 

dataRDD.map(row => {
                val wert = row._5.replaceAll("[\\r\\n]", "|") 
                (row._1,row._2,row._3,row._4,wert,row._6, row._7,row._8,row._9,row._10)
                }).collect().foreach(println)

Spark——版本1.3.1


如果您可以使用 Spark SQL 1.5 或更高版本,您可以考虑使用功能可用于列。假设您不知道(或没有)列的名称,您可以按照以下代码片段执行操作:

val df = test.toDF()

import org.apache.spark.sql.functions._
val newDF = df.withColumn(df.columns(4), regexp_replace(col(df.columns(4)), "[\\r\\n]", "|"))

如果您知道列的名称,则可以替换df.columns(4)在这两次事件中都以它的名字命名。

我希望这有帮助。 干杯。

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

替换 csv 文件中的新行 (\n) 字符 - Spark scala 的相关文章

随机推荐

  • Python,多线程太慢,多进程

    我是多处理新手 我了解一些有关线程的知识 但我需要提高计算速度 希望通过多重处理 示例说明 将字符串发送到线程 更改字符串 基准测试 将结果发回打印 from threading import Thread class Alter Thre
  • 将多维Json数组解析为Python

    我第一次尝试解析 JSON 并处理多维数组 这让我不知所措 secret Hidden minutes 20 link http www 1 com bookmark collection free link name free link
  • 在 Guice 中绑定,无需

    我有个问题 通常在Guice中我使用bind class to 另一个类实现 但是我在代码源中发现他们仅使用了bind class 没有 to another class Implementation 部分 这是什么意思 bind clas
  • 如何用关系代数求 MAX?

    使用数据库时 如何使用关系代数求 MAX 假设您有一个关系 A 具有单个属性 a 减少一个更复杂的关系是关系代数中的一个简单任务 我确信您已经做到了这一点 所以现在您想要找到最大值A 中的值 一种方法是找到 A 与其自身的叉积 请务必重命名
  • 从定期异步请求创建 observable

    我想要一种将异步方法转换为可观察方法的通用方法 就我而言 我正在处理使用的方法HttpClient从 API 获取数据 假设我们有方法Task
  • 为什么在 Ruby 中应该避免使用 then 关键字?

    一些 Ruby 风格指南中提到 您应该 永远不要使用 就我个人而言 我认为 then 关键字可以使代码更密集 这往往更难阅读 这个建议还有其他理由吗 我几乎从不使用then关键词 然而 有一种情况我认为它极大地提高了可读性 考虑以下多条件
  • 除了 new object() 之外,还有什么理由要锁定其他东西吗?

    object theLock new object lock theLock 我总是用一个new object 为此 但我想知道 是否有任何情况下您会锁定更具体的类型 在我看来 任何引用类型都可以被锁定 使用虚拟对象的原因是为了避免常见的锁
  • Angular2 - 如何使用具有动态 url 的路由器

    假设我有一个嵌套的 itemListComponent 它是 rootComponent 的子组件 使用以下模板 span a item title a span 由 Json 服务提供的路径 item url 可能具有以下路径结构之一 c
  • 将解决方案应用于实际数据时结果不正确

    我尝试将此问题中提供的解决方案应用于我的真实数据 选择多索引数据框中的行 不知怎的 我无法得到它应该给出的结果 我已附上可供选择的数据框以及结果 我需要的 应返回第 3 11 和 12 行 当您连续添加 4 列时 也应选择 12 现在不是
  • Heroku 可以使用哪些级别的日志记录?

    我有一个在 Heroku 上运行的 Rails 应用程序 它运行良好 我让它以调试级别日志记录运行 但现在我切换回 INFO 还有哪些其他级别的调试可用 当运行生产时 我应该使用什么级别的日志记录 在 Heroku 上 您可以使用 LOG
  • 为什么我无法运行我的 Node.js Express Web 应用程序

    Node js 和 Express 生成器确实非常方便且易于理解 但是 我无法通过运行 c my application root gt DEBUG my application bin www 来启动我的服务器 Windows 似乎不理解
  • 找不到 matplotlib 数据文件

    我是 python 新手 我正在尝试使用 pyinstaller 从 py 脚本创建 exe 但在尝试运行 exe 时出现此错误 无法找到 matplotlib 数据文件 当我在 python 空闲中运行脚本时 我没有收到此错误 我试过了
  • Eclipse CDT Indexer 不能完全识别 c++11

    首先 我了解用于启用 c 11 支持的 std c 11 标志及其放置位置 我已附加 std c 11 to Project gt Properties gt C C Build gt Settings gt Tool Settings g
  • Internet Explorer-10 websocket 中的 IPv6 地址给出语法错误

    我从服务器获取 ipv6 地址 然后我为 websocket 创建 url 我的网址看起来 喜欢 ws xxxx xxxx xxxx xxxx xxxx xxxx 十进制端口 其中 x 十六进制的 0 f 这个网址在 chrome 和 fi
  • $_SERVER["REMOTE_ADDR"] 提供服务器 IP 而不是访问者 IP

    我正在尝试跟踪访问者的 IP 地址 使用时 SERVER REMOTE ADDR 我得到的是服务器的IP地址而不是访问者的IP地址 我在多个位置的多台机器上进行了尝试 它们都产生了完全相同的 IP 是否有一些 PHP 服务器设置可能会影响这
  • Ruby 中的有符号和无符号整数

    像 C 一样 Ruby 是否有有符号和无符号整数 如果有的话 是否意味着 String 类的 length 方法返回有符号整数 因为在 C 整数中 如果未指定则意味着有符号 Ruby 实现整数的方式使得有符号 无符号的区别无关紧要 因为 R
  • 如何排列 TPopupMenu 以使其准确地将自己定位在按钮上方?

    我想要一个按钮上方的弹出菜单 Delphi 包装 Win32 菜单系统的方式似乎排除了底层 Win32 API 提供的每种模式或标志 而这些模式或标志当时并没有出现在 VCL 作者的脑海中 一个这样的例子似乎是TPM BOTTOMALIGN
  • jQuery UI DatePicker - 禁用除每个月的第一天和第 15 天之外的所有日期

    我想禁用此日期选择器上除每月 1 日和 15 日之外的所有日期 我引用了这个已回答的问题 但我只能返回一个日期 我是 javascript 的新手 jQuery UI DatePicker 禁用除每月最后一天之外的所有日期 任何帮助都会很棒
  • Python 中的 3D Dicom 可视化

    我是 3D 图像处理新手 我想知道如何用python查看dicom系列 我尝试使用 matplotlib 和 VTK 在 matplot 中 我无法像使用 volViewer 在 matlab 中查看那样查看体积 关于 VTK 我无法导入
  • 替换 csv 文件中的新行 (\n) 字符 - Spark scala

    为了说明问题 我采取了一个测试集 csv 文件 但在实际情况下 问题必须处理超过 TeraByte 的数据 我有一个 CSV 文件 其中的列用引号括起来 col1 但是当数据导入完成后 一列包含换行符 n 当我想将它们保存为 Hive 表时