小编Jua*_*ith的帖子

直接在Azure Datalake中将Python Dataframe写入CSV文件

我已将一个excel文件导入到pandas数据框中,并已完成数据浏览和清理过程。

我现在想将已清理的数据帧写到csv文件中,再回到Azure DataLake,而不必先将其保存为本地文件。我正在使用熊猫3。

我的代码如下所示:

token = lib.auth(tenant_id = '', 
                 client_secret ='', 
                 client_id = '')

adl = core.AzureDLFileSystem(token, store_name)

with adl.open(path='Raw/Gold/Myfile.csv', mode='wb') as f:
    **in_xls.to_csv(f, encoding='utf-8')**
    f.close()
Run Code Online (Sandbox Code Playgroud)

我在粗体语句中得到以下转储。

TypeError:需要一个类似字节的对象,而不是'str'

我也尝试过但没有运气

with adl.open(path='Raw/Gold/Myfile.csv', mode='wb') as f:
    with io.BytesIO(in_xls) as byte_buf:
        byte_buf.to_csv(f, encoding='utf-8')
        f.close()
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

TypeError:需要一个类似字节的对象,而不是“ DataFrame”

任何想法/技巧将不胜感激

python azure-data-lake

5
推荐指数
1
解决办法
3346
查看次数

PySpark:如何使用isnan检查列是否包含数字

我有一个如下所示的数据框:

+------------------------+----------+
|Postal code             |PostalCode|
+------------------------+----------+
|Muxía                   |null      |
|Fuensanta               |null      |
|Salobre                 |null      |
|Bolulla                 |null      |
|33004                   |null      |
|Santa Eulàlia de Ronçana|null      |
|Cabañes de Esgueva      |null      |
|Vallarta de Bureba      |null      |
|Villaverde del Monte    |null      |
|Villaluenga del Rosario |null      |
+------------------------+----------+
Run Code Online (Sandbox Code Playgroud)

如果邮政编码列仅包含数字,我想创建一个只存储数字邮政编码的新列.如果邮政编码列仅包含文本,则需要创建名为"Municipality"的新列.

我尝试使用'isnan'作为我的理解,这将检查一个值是否不是一个数字,但这似乎不起作用.列类型应该是字符串,以使其工作或?

到目前为止,我的尝试是:

> df2 = df.withColumn('PostalCode', when(isnan(df['Postal code']), df['Postal code']) 
Run Code Online (Sandbox Code Playgroud)

查看上面发布的数据框结果示例,您可以看到为新列返回所有值'Null',也为邮政编码'33004'返回

任何想法将不胜感激

apache-spark pyspark

4
推荐指数
1
解决办法
7665
查看次数

如何计算数据框的百分比

我有一个模拟到如下所示数据框的场景。

Area   Type    NrPeople     
1      House    200
1      Flat     100
2      House    300
2      Flat     400
3      House   1000
4      Flat     250
Run Code Online (Sandbox Code Playgroud)

如何想按降序计算和返回每个区域的人的Nr,但最重要的是我很难计算总百分比。

结果应如下所示:

Area   SumPeople      %     
3       1000        44%
2        700        31%
1        300        13%
4        250        11%
Run Code Online (Sandbox Code Playgroud)

请参见下面的代码示例:

HouseDf = spark.createDataFrame([("1", "House", "200"), 
                              ("1", "Flat", "100"), 
                              ("2", "House", "300"), 
                              ("2", "Flat", "400"),
                              ("3", "House", "1000"), 
                              ("4", "Flat", "250")],
                              ["Area", "Type", "NrPeople"])

import pyspark.sql.functions as fn 
Total = HouseDf.agg(fn.sum('NrPeople').alias('Total')) 

Top = HouseDf\
    .groupBy('Area')\
    .agg(fn.sum('NrPeople').alias('SumPeople'))\
    .orderBy('SumPeople', ascending=False)\
    .withColumn('%', fn.lit(HouseDf.agg(fn.sum('NrPeople'))/Total.Total))\
Top.show() …
Run Code Online (Sandbox Code Playgroud)

python apache-spark pyspark

1
推荐指数
1
解决办法
5935
查看次数

标签 统计

apache-spark ×2

pyspark ×2

python ×2

azure-data-lake ×1