Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PySpark-如何删除csv输出中的科学符号_Python_Apache Spark_Pyspark_Scientific Notation - Fatal编程技术网

Python PySpark-如何删除csv输出中的科学符号

Python PySpark-如何删除csv输出中的科学符号,python,apache-spark,pyspark,scientific-notation,Python,Apache Spark,Pyspark,Scientific Notation,我有一个spark聚合,我想将结果输出到csv,但我发现spark总是输出大量的科学符号小数。我尝试了中提到的解决方案,但也没有成功 预期产出: foo,avg(bar) a,0.0000002 b,0.0000001 实际产量: foo,avg(bar) a,2.0E-7 b,1.0E-7 请参见下面的示例: 从操作系统导入路径 进口舒蒂尔 导入glob 从pyspark.sql导入SQLContext,函数为F,类型为 def测试(sc): sq=SQLContext(sc) 数据=[(

我有一个spark聚合,我想将结果输出到csv,但我发现spark总是输出大量的科学符号小数。我尝试了中提到的解决方案,但也没有成功

预期产出:

foo,avg(bar)
a,0.0000002
b,0.0000001
实际产量:

foo,avg(bar)
a,2.0E-7
b,1.0E-7
请参见下面的示例:

从操作系统导入路径
进口舒蒂尔
导入glob
从pyspark.sql导入SQLContext,函数为F,类型为
def测试(sc):
sq=SQLContext(sc)
数据=[(“a”,1e-7),(“b”,1e-7),(“a”,3e-7)]
df=sq.createDataFrame(数据,['foo','bar'])
#12位小数点后9位
decType=类型。DecimalType(精度=12,刻度=9)
#将列输入和列输出强制转换为十进制
累计=[F.平均值(F.col(“bar”).cast(decType)).cast(decType)]
组=[F.col(“foo”)]
结果=df.groupBy(*groups).agg(*aggs)
写入(结果)
返回df、AGG、组、结果
def写入(结果):
tmpDir=path.join(“res”,“tmp”)
配置={“sep”:“,”}
result.write.format(“csv”)\
.options(**配置)\
.save(tmpDir)
#完成分发部分后,将其写入单个文件
allFiles=glob.glob(path.join(tmpDir,*.csv)))
fullOut=path.join(“res”,“final.csv”)
将open(fullOut,'wb')作为wfd:
#首先写出标题行
header=config.get(“sep”、“、”).join(result.columns)
wfd.write(标题+“\n”)
对于所有文件中的f:
打开(f,'rb')作为fd:
shutil.copyfileobj(fd,wfd)
通过
通过
shutil.rmtree(tmpDir)
返回
在pyspark外壳中:

将火花_测试导入为t
t、 测试(sc)

是否尝试将聚合结果强制转换为
字符串
?这样,excel就不会将该值识别为十进制,因此不会给出科学的符号表示法。

请将当前输出和预期输出相加。我没有。您介意提供一个工作示例吗?有没有一种方法可以使用format_string删除尾随的零?当我将数据帧写到csv@thentangler我还没试过,但我们再把它们扔到绳子上怎么样?行了!非常感谢。
>>> df1 = spark.createDataFrame([('a','2.0e-7'),('b','1e-5'),('c','1.0e-7')],['foo','avg'])
>>> df1.show()
+---+------+
|foo|   avg|
+---+------+
|  a|2.0e-7|
|  b|  1e-5|
|  c|1.0e-7|
+---+------+

>>> df1.select('foo','avg',format_string('%.7f',df1.avg.cast('float')).alias('converted')).show()
+---+------+---------+
|foo|   avg|converted|
+---+------+---------+
|  a|2.0e-7|0.0000002|
|  b|  1e-5|0.0000100|
|  c|1.0e-7|0.0000001|
+---+------+---------+