首页 > 解决方案 > 在 azure synapse 中存储一个简单的字符串作为文本文件(到数据湖 gen2)

问题描述

我正在尝试使用在突触笔记本中编写的 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'

标签: pythonazureazure-synapseazure-data-lake-gen2

解决方案


在此处输入图像描述 因此python rdd_text = sc.parallelize(list(str)).collect() 在这里,您的结果以列表的形式存储在rdd_text. 因为它是一个普通的 python 语句,因为它collect()返回一个列表。

RDD是spark中的分布式数据结构和基本抽象,是不可变的。

例如, remove()或者append()是python中列表的对象,以便添加或删除元素-这样savesaveAsTextFile是RDD写入文件的对象。

如下图所示,您可以看到tuple()append 没有属性,因为它们是不可变的,RDD 也是如此。 在此处输入图像描述

因此,它不会将结果存储为列表,而不是python rdd_text = sc.parallelize(list(str)).collect() 可以使用。python rdd_text = sc.parallelize(list(str))

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)


推荐阅读