我试图在DataFrame中加载一组我保存在文本格式文件中的向量,例如:
2.846110820770263672e+00 -1.368924856185913086e+00 6.769183874130249023e-01
2.846110820770263672e+00 -1.368924856185913086e+00 6.769183874130249023e-01
...
我使用Spark 2.4.0(从源码构建),我的代码类似于:
sc = SparkSession.builder.appName(appName).master("local[4]").getOrCreate()
data = sc.read.text(PATH_TO_VECTORS)
parsedData = data.rdd.map(lambda line: np.asarray([float(x) for x in line[0].split()]))
有时我在一些不在文件本身中的随机值上获得浮点解析错误。 例如,第一次错误可能是" ValueError:无法将字符串转换为浮点数:' 95e-01 \ x00 \ x001 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 .. "并且第二次可能是"无法将字符串转换为浮点数:' -1.436311483383178711e + 00 \ x005e-01'"等...
有人知道发生了什么吗?奇怪的是,每次运行我的代码时,我都有一个不同的值,浮点转换不起作用或它可以工作。
提前感谢!
答案 0 :(得分:0)
错误是因为spark使用NF.exe
作为默认编码。因此,一些文本被读作\ x00 \ x001 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00编码的字符串。您需要做的就是使用 utf-8编码告诉 spark 。你应该把它全部设定好。
我建议您使用unicode
来阅读文本文件,因为可以选择定义编码。而且您甚至不必转换为sparkContext
,因此数据将被读取为rdd
。所以你可以做类似下面的事情
rdds
我希望答案很有帮助