python - 将字节数组转换为字符串spark

标签 python arrays csv apache-spark pyspark

我有一个包含多个字段的 csv 文件。有几个字段的数据以字节数组格式(b'1234')出现。我想删除这些 b'(从字节数组转换为字符串)。

我发现我们可以通过两种方式将字节数组转换为字符串。

>>> s1 = b'Hi'
>>> s2 = s1.decode('utf-8') 
>>> print(s2)
Hi


>>> s1 = b'Hi'
>>> s2 = str(s1, 'utf-8')
>>> print(s2)
Hi

由于 CSV 中有如此多的字段,其中只有少数字段包含字节数组,因此我无法直接将该函数应用于每个字段。我不知道哪些是字节数组字段,哪些是字符串、int 字段。

将字节数组转换为 csv 文件中的字符串的任何建议。我正在尝试在 Spark 中执行此操作。

我的代码片段:

df = sqlContext.read.format('com.databricks.spark.csv').options(header='true', inferschema='true') \
    .option("delimiter", ",")\
    .option("multiLine", "true")\
    .load("file.csv")

输入数据:

b'1234',b'123',Hi,"Hello",b'2FB',b'272',b'4943',b'786',2018-02-19,,Out,768,"Data",b'502',351,

随着架构动态变化,我们无法控制哪些是字节数组,哪些是字符串。我试过this解决方案,但它对我不起作用(它将所有字段转换为 nan)。

最佳答案

正如您所说,您有一个包含字节的 csv 文件

b'1234',b'123',Hi,"Hello",b'2FB',b'272',b'4943',b'786',2018-02-19,,Out,768,"Data",b'502',351,

我看到的直接解决方案是将 b'' 字符串替换为空字符串,并解析数据以形成数据框

rdd = sc.textFile("path to your csv file")\
    .map(lambda x: x.replace("b'", "").replace("'", ""))

已更新

正如@ixaxaar 评论的那样

A better way is to do lambda x: x[2:-1]

所以你可以这样做

rdd = sc.textFile("path to your csv file").map(lambda x: x[2:-1])

关于python - 将字节数组转换为字符串spark,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48863790/

相关文章:

java - 关于Java Split命令解析csv文件

python - 困惑如何使用 argparse

python - 数据未使用 Django 表单保存到数据库

javascript - 从js文件中 trim 空格在python中不起作用

javascript - 如何反向迭代 aurelia 阵列中继器?

php - 过滤以自定义选定字符开头的值的数组

python - 如何从 SQLAlchemy 中的现有表中获取列名和类型?

javascript - Highchart pie - 动态饼图的数组动态

c# - 读取 JSON 文件中的百万个字符时出现异常 [OutOfMemoryException]

python - 使用 Pandas reshape 2 列的数据