将一个简单字符串作为文本文件存储在Azure Synapse中(到Data Lake Gen2)

aydmsdu9  于 2023-10-22  发布在  其他
关注(0)|答案(2)|浏览(118)

我试图做存储一个简单的字符串作为一个文本文件在datalakeGen2与python代码写在synapse笔记本。但它似乎并不直接向前。
我尝试将文本转换为rdd,然后存储:

from pyspark import SparkConf
from pyspark import SparkContext
sc = SparkContext.getOrCreate(SparkConf().setMaster("local[*]"))
str = "test string"

text_path = adls_path + 'test.xml'

rdd_text = sc.parallelize(list(str)).collect()
# type(rdd_text)

rdd_text.saveAsTextFile(text_path)

但它给出的错误是:

AttributeError: 'list' object has no attribute 'saveAsTextFile'
Traceback (most recent call last):

AttributeError: 'list' object has no attribute 'saveAsTextFile'
xwmevbvl

xwmevbvl1#

x1c 0d1x作为python rdd_text = sc.parallelize(list(str)).collect()所以在这里,你的结果是以列表的形式存储在rdd_text.因为它是一个普通的python语句,因为collect()返回一个列表。
RDD是一种分布式的数据结构,是spark中的基本抽象,是不可变的。
例如,remove()append()是python中列表的对象,以便添加或删除元素-因此保存saveAsTextFile是RDD的对象来写入文件。
如下图所示,你可以看到tuple()没有append属性,因为它们是不可变的,RDD也是如此。

因此,可以使用python rdd_text = sc.parallelize(list(str))代替python rdd_text = sc.parallelize(list(str)).collect(),这样就不会将结果存储为List。

from pyspark import SparkConf
from pyspark import SparkContext

sc = SparkContext.getOrCreate(SparkConf().setMaster("local[*]"))

string = "test string"
adls_path="abfss://[email protected]/symbolexcel.xlsx"

text_path = adls_path  + 'test.xlsx'
rdd_text = sc.parallelize(list(string))

rdd_text.saveAsTextFile(text_path)
mlnl4t2r

mlnl4t2r2#

我可以用Pandas做这个。您将需要一个链接服务来将synapse连接到存储位置。Using Pandas in Synapse参见Pandas to txt
将pandas导入为pd
string = 'test_string'
path = adls_path + 'test.txt'
df = pd.DataFrame(“数据”:[string]})
df.to_csv(path,sep='\t',index=False,header=False)

相关问题