在 azure synapse 中存储一个简单的字符串作为文本文件(到数据湖 gen2)
Posted
技术标签:
【中文标题】在 azure synapse 中存储一个简单的字符串作为文本文件(到数据湖 gen2)【英文标题】:store a simple string as text file in azure synapse (to data lake gen2) 【发布时间】:2021-09-11 22:47:16 【问题描述】:我正在尝试使用在 synapse notebook 中编写的 python 代码将一个简单的字符串作为文本文件存储在 datalakeGen2 中。但这似乎并不直截了当。
我尝试将文本转换成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'
【问题讨论】:
【参考方案1】:
由于python rdd_text = sc.parallelize(list(str)).collect()
所以在这里,你的结果以列表的形式存储在rdd_text
中。因为它是一个普通的 python 语句,因为collect()
返回一个列表。
RDD是spark中的分布式数据结构和基本抽象,是不可变的。
例如remove()
或append()
是python中列表的对象,以便添加或删除元素-因此保存saveAsTextFile
是RDD写入文件的对象。
如下图,您可以看到tuple()
没有附加属性,因为它们是不可变的,RDD 也是。
因此,可以使用python rdd_text = sc.parallelize(list(str))
代替python rdd_text = sc.parallelize(list(str)).collect()
,因此它不会将结果存储为列表。
from pyspark import SparkConf
from pyspark import SparkContext
sc = SparkContext.getOrCreate(SparkConf().setMaster("local[*]"))
string = "test string"
adls_path="abfss://data@xxxxxxxx.dfs.core.windows.net/symbolexcel.xlsx"
text_path = adls_path + 'test.xlsx'
rdd_text = sc.parallelize(list(string))
rdd_text.saveAsTextFile(text_path)
【讨论】:
感谢您的帮助!我测试了你回答的代码,它将文本存储为几个 blob 文件,我给它的文件名成为文件夹的名称。有没有办法解决这个问题? 这里是实现文件在一个分区中的文件,因为我们必须使用write()
:mungingdata.com/apache-spark/output-one-file-csv-parquet,来重命名文件夹:***.com/questions/54101135/…以上是关于在 azure synapse 中存储一个简单的字符串作为文本文件(到数据湖 gen2)的主要内容,如果未能解决你的问题,请参考以下文章
通过托管标识通过 Synapse 访问 Azure 存储帐户
使用 pyspark 在 azure synapse studio 中获取文件的完整路径
我想为在 MS Azure Synapse 中存储为 varchar(max) 的匹配标记提取 XML 值