小编Mic*_*ael的帖子

使用 pyspark 写入增量文件时出错 - 原因为:java.lang.ClassNotFoundException:delta.DefaultSource

我有一个镶木地板文件,我正在尝试将其写入增量表。我认为我的代码很简单。

from pyspark.sql import SparkSession
spark = SparkSession.builder \
    .master("local[*]") \
    .appName('test') \
    .config("spark.jars.packages", "io.delta:delta-core_2.12:0.7.0") \
    .config("spark.sql.extensions", "io.delta.sql.DeltaSparkSessionExtension") \
    .config("spark.sql.catalog.spark_catalog", "org.apache.spark.sql.delta.catalog.DeltaCatalog") \
    .config('spark.ui.port', '4050') \
    .getOrCreate()
df = spark.read.format('parquet').load('fhvhv_tripdata_2021-01.parquet')
df.write.format('delta').save('deltafiles')
Run Code Online (Sandbox Code Playgroud)

当我尝试编写它时,尽管收到此错误

...
Caused by: java.lang.ClassNotFoundException: delta.DefaultSource
    at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:476)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:589)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
    at org.apache.spark.sql.execution.datasources.DataSource$.$anonfun$lookupDataSource$5(DataSource.scala:65
...
Run Code Online (Sandbox Code Playgroud)

我正在使用:Python 版本 3.8.10 当我运行 pyspark --version 我得到:

      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 3.2.1
      /_/
                        
Using Scala version 2.12.15, OpenJDK 64-Bit Server …
Run Code Online (Sandbox Code Playgroud)

pyspark jupyter-notebook delta-lake

5
推荐指数
0
解决办法
5979
查看次数

Pandas 值计数与多次出现的约束

在此处使用来自 Kaggle 的 Wine Review 数据。我可以使用 value_counts() 按种类返回出现次数

在此处输入图片说明

但是,我正在尝试找到一种快速方法,将结果限制在出现多次的品种及其数量上。

尝试df.loc[df['variety'].value_counts()>1].value_counts() 并且df['variety'].loc[df['variety'].value_counts()>1].value_counts() 都返回错误。

结果可以变成一个 DataFrame 并在那里添加约束,但有些东西告诉我有一种更优雅的方式来实现这一点。

在此处输入图片说明

dataframe pandas jupyter-notebook kaggle

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

Pandas read_parquet() 错误:pyarrow.lib.ArrowInvalid:从时间戳 [us] 转换到时间戳 [ns] 将导致时间戳超出范围

我正在尝试读取此处找到的镶木地板格式的 02-2019 fhv 数据

https://d37ci6vzurychx.cloudfront.net/trip-data/fhv_tripdata_2019-02.parquet

但是当我尝试用 Pandas 读取数据时

df = pd.read_parquet('fhv_tripdata_2019-02.parquet')
Run Code Online (Sandbox Code Playgroud)

它抛出错误:

  File "pyarrow/table.pxi", line 1156, in pyarrow.lib.table_to_blocks
  File "pyarrow/error.pxi", line 99, in pyarrow.lib.check_status
pyarrow.lib.ArrowInvalid: Casting from timestamp[us] to timestamp[ns] would result in out of bounds timestamp: 33106123800000000
Run Code Online (Sandbox Code Playgroud)

有谁知道如何打印出有问题的行或强制这些值?让它忽略这些行?

datetime python-3.x pandas parquet

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

找到正确版本的 python/sklearn 以在 pyenv 中使用机器学习模型

我在 Kaggle 上腌制了一个模型,并尝试下载它在本地运行。我使用诗歌和 pyenv 运行以下命令来创建项目:

pyenv local 3.6.6    
poetry new model_api
cd model_test
poetry env use python
poetry add "sklearn>=0.21.3"
Run Code Online (Sandbox Code Playgroud)

但收到以下错误。

在此输入图像描述

如果我只是使用 sklearn 并将其与诗歌一起安装,那么在 VS Code 中执行代码时会出现此错误。

/bin/python /home/gary/Documents/model_api/model_api/app.py
Traceback (most recent call last):
  File "/home/gary/Documents/model_api/model_api/app.py", line 5, in <module>
    model = pickle.load(f)
ModuleNotFoundError: No module named 'sklearn.ensemble.forest'
Run Code Online (Sandbox Code Playgroud)

这是我尝试运行的代码。

import sklearn 
import pickle

f = open('./model/ForestModel','rb')
model = pickle.load(f)
Run Code Online (Sandbox Code Playgroud)

根据我在 Kaggle 上看到的内容,我尝试使用 Python 3.6.6 和 sklearn 0.21.3: 在此输入图像描述

如果我尝试使用更新版本的 Python(例如 3.8.10),我会收到相同的错误。我想我错过了一些简单/明显的东西。任何我可以检查的指示或事情将不胜感激。

pickle scikit-learn pyenv python-poetry

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

在Where语句中使用&gt;,&lt;或&lt;&gt;时,除以零错误。不涉及部门经营者

我有两个使用相同收据表的CTE。收据类型“ a”表示要收取多少费用,是否可以收到一定金额。如果收据类型“ b”是在原始收据之外收到的,则有多少。这些由mnth,cusnbr和job匹配。收据上还分配了多少用于不同费用的收据。

如果收据已至少支付了99%,我将尝试总计工作时间。这些记录也基于cusnbr,jobnbr和mnth。下面的代码工作正常。

with billed as(Select cusnbr 
,job
,mnth
,sum(bill_item_1) as 'Billed Item'
,sum(billed) as 'Billed'
From accounting
Where mytype in ('a','b')
Group by cusnbr
,job
,mnth)

paid as(Select cusnbr 
,job
,mnth
,sum(rcpt_item_1) as 'Rcpt Item'
,sum(billed) as 'Paid'
From accounting
Where mytype in ('a','b')
Group by cusnbr
,job
,mnth)


Select b.cusnbr
,b.job
,b.mnth
,sum(g.hours) as 'Total Hours'
,b.[Billed Item]
,p.[Rcpt Item]
From billed b inner join paid p
on b.cusnbr = p.cusnbr
and b.job = p.job
and b.mnth …
Run Code Online (Sandbox Code Playgroud)

sql sql-server

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