【问题标题】:store a simple string as text file in azure synapse (to data lake gen2)在 azure synapse 中存储一个简单的字符串作为文本文件(到数据湖 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'

【问题讨论】:

    标签: python azure azure-synapse azure-data-lake-gen2


    【解决方案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)

    【讨论】:

    猜你喜欢
    • 2021-03-26
    • 1970-01-01
    • 2022-09-27
    • 1970-01-01
    • 2020-11-05
    • 2021-11-29
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    相关资源
    最近更新 更多