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

时间:2018-02-19 10:12:33

标签: 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文件中将字节数组转换为字符串的任何建议。我试图在火花中做到这一点。

我的代码段:

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)。

1 个答案:

答案 0 :(得分:0)

正如你所说,你有一个包含字节为

的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''字符串,并将数据解析为dataframe

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

已更新

正如@ixaxaar评论

  

更好的方法是做lambda x:x [2:-1]

所以你可以做到

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