我有一个包含多个字段的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)。
答案 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])