小编bba*_*ker的帖子

如何在Spark 2.0+中编写单元测试?

我一直试图找到一种合理的方法来测试SparkSessionJUnit测试框架.虽然似乎有很好的例子SparkContext,但我无法弄清楚如何使用相应的示例SparkSession,即使它在spark-testing-base内部的几个地方使用过.我很乐意尝试一种不使用spark-testing-base的解决方案,如果它不是真正正确的方式去这里.

简单的测试用例(完整MWE项目build.sbt):

import com.holdenkarau.spark.testing.DataFrameSuiteBase
import org.junit.Test
import org.scalatest.FunSuite

import org.apache.spark.sql.SparkSession


class SessionTest extends FunSuite with DataFrameSuiteBase {

  implicit val sparkImpl: SparkSession = spark

  @Test
  def simpleLookupTest {

    val homeDir = System.getProperty("user.home")
    val training = spark.read.format("libsvm")
      .load(s"$homeDir\\Documents\\GitHub\\sample_linear_regression_data.txt")
    println("completed simple lookup test")
  }

}
Run Code Online (Sandbox Code Playgroud)

使用JUnit运行它的结果是加载线上的NPE:

java.lang.NullPointerException
    at SessionTest.simpleLookupTest(SessionTest.scala:16)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at …
Run Code Online (Sandbox Code Playgroud)

junit unit-testing scala apache-spark apache-spark-sql

59
推荐指数
4
解决办法
4万
查看次数

当组权限看起来正确时,如何修复"拨打unix /var/run/docker.sock:连接:权限被拒绝"?

在Ubuntu 18.04更新之后我突然遇到问题:之前我在系统上没有问题地使用了docker,但突然间我不能.据我所知,权限看起来正确:

$ docker run hello-world
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.35/containers/create: dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.
$ ls -last /var/run/docker.sock 
0 srw-rw---- 1 root docker 0 Jul 14 09:10 /var/run/docker.sock
$ whoami
brandon
$ cat /etc/group | grep docker
docker:x:995:brandon
nvidia-docker:x:994:
Run Code Online (Sandbox Code Playgroud)

编辑:

集团信息:

$ groups
brandon
$ groups brandon
brandon : brandon adm cdrom sudo dip plugdev games lpadmin sambashare docker
$ whoami …
Run Code Online (Sandbox Code Playgroud)

docker ubuntu-18.04

28
推荐指数
8
解决办法
2万
查看次数

如何理解"MonadUnliftIO"对"无状态monad"的要求?

我已经浏览了https://www.fpcomplete.com/blog/2017/06/tale-of-two-brackets,虽然略读了一些部分,但我仍然不太明白核心问题" StateT不好,IO是"好吧",除了模糊地感觉到Haskell允许一个人编写糟糕的StateTmonad(或者在文章的最终例子中,MonadBaseControl而不是StateT,我认为).

在黑线鳕中,必须满足以下法律:

askUnliftIO >>= (\u -> liftIO (unliftIO u m)) = m
Run Code Online (Sandbox Code Playgroud)

所以这似乎是说m在使用时状态不会在monad中发生变异askUnliftIO.但在我看来,IO整个世界都可以成为国家.例如,我可以读写磁盘上的文本文件.

引用迈克尔的另一篇文章,

虚假纯度我们说WriterT和StateT是纯粹的,技术上它们是纯粹的.但是说实话:如果你有一个完全生活在StateT中的应用程序,你就不会从纯代码中获得你想要的限制突变的好处.也可以称之为铁锹,并接受你有一个可变变量.

这让我觉得情况确实如此:对于IO我们是诚实的,StateT我们并不诚实可靠......但这似乎是上述法律试图表明的另一个问题; 毕竟,MonadUnliftIO是假设IO.我在概念上理解如何IO比其他东西更具限制性.

更新1

睡觉后(有些人),我仍然感到困惑,但随着时间的推移逐渐减少.我制定了法律证据IO.我意识到idREADME中的存在.特别是,

instance MonadUnliftIO IO where
  askUnliftIO = return (UnliftIO id)
Run Code Online (Sandbox Code Playgroud)

所以askUnliftIO似乎会返回IO (IO a)一个UnliftIO m.

Prelude> fooIO = print 5
Prelude> :t fooIO
fooIO :: …
Run Code Online (Sandbox Code Playgroud)

haskell monad-transformers classy-prelude

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

Data.Vector的修改能否真正完成?

在源modify被指出该操作将在地方,如果它是安全的话来进行,并会以其他方式修改载体的拷贝.

但是看代码modify:

modify :: Vector v a => (forall s. Mutable v s a -> ST s ()) -> v a -> v a
modify p = new . New.modify p . clone
Run Code Online (Sandbox Code Playgroud)

它看起来clone总是被调用(这对我来说很有意义,因为我认为它必须是对不可变向量的破坏性操作).

我误解了吗?如果没有,那么什么是clone未调用的示例,以及如何Data.Vector完成旁路?

haskell haskell-vector

7
推荐指数
0
解决办法
75
查看次数

是否可以将 github git-lfs 图像嵌入到 github wiki 中作为私有 repo+wiki?

Github 允许您在 wiki 页面中嵌入图像。

问题似乎是,对于私有存储库,访问图像的权限是由附加到 URL 的临时令牌决定的,如下所示:

https://media.githubusercontent.com/media/XYZ/MyProject/master/WikiMedia/Foo.png?token=XXXXXXXXXX-YYYYYYYYYYYYYYY-YYYYYYYYYYYYYYY
Run Code Online (Sandbox Code Playgroud)

该 URL 有效,但只是暂时的;有没有更稳定的方法?

git github gollum-wiki git-lfs

6
推荐指数
0
解决办法
178
查看次数

如何调试自定义 nix 文件的 nix 构建错误?

我正在尝试在 Ubuntu 16.04 上使用 Nix。

\n\n

设置完成后,我尝试构建以下表达式:

\n\n
let\n  pkgs = import <nixpkgs> {};\n  stdenv = pkgs.stdenv;\nin rec {\n  scalaEnv = stdenv.mkDerivation rec {\n    name = "scala-env";\n    shellHook = \'\'\n    alias cls=clear\n    \'\';\n    CLANG_PATH = pkgs.clang + "/bin/clang";\n    CLANGPP_PATH = pkgs.clang + "/bin/clang++";\n    buildInputs = with pkgs; [\n      stdenv\n      sbt\n      openjdk\n      boehmgc\n      libunwind\n      re2\n      clang\n      zlib\n      ammonite\n    ];\n  };\n} \n
Run Code Online (Sandbox Code Playgroud)\n\n

但这以错误结束:

\n\n
*** Downloading \xe2\x80\x98https://cache.nixos.org/nar/022mrfa98hxccsn9znr9z9s7sh3kfc5wzvgfx45x5drcz9wq3wyv.nar.xz\xe2\x80\x99 to \xe2\x80\x98/nix/store/y1scdckyi7ij30771rl1pdq4s9gj683a-sbt-1.0.1\xe2\x80\x99...\n  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n …
Run Code Online (Sandbox Code Playgroud)

nix nixpkgs

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

如何在Scala中完全避免运行时反射?

请注意,这是一个社区帖子,应根据需要添加示例.如果您无法直接编辑添加示例(问题示例或解决方案)的答案,请在评论中发布带有要点(或类似内容)的链接或添加单独的答案,以便稍后进行集成.

Scala 3可能根本不包含scala.reflect.runtime(Dotty目前没有,并且计划这样做不确定).虽然适用于Scala 2和Dotty的答案可能是转换目的和立即改进性能的首选,但也欢迎Dotty特定的解决方案.

参考

https://www.cakesolutions.net/teamblogs/ways-to-pattern-match-generic-types-in-scala

scala dotty

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

给定功能记录和功能所作用类型的数据记录,如何通用地应用功能记录?

标题有点不准确,因为我的特殊情况涉及更多点:与第一条记录中的函数不直接作用于第二条记录中的值相反,它们作用于值的列表(或其他可遍历)。可以假设,如果为某个特定领域申请的结果返回与该领域相同类型的值,那么这可以给我们带来任何好处。

例如:

data Foo = Foo {
  v1 :: Int
, v2 :: Double
}

data FooFuns = FooFuns {
  v1 :: [Int] -> Int
, v2 :: [Double] -> Double
}
Run Code Online (Sandbox Code Playgroud)

所以现在的目标是自动构建

result = Foo {
  v1 = (v1 FooFuns) (v1 <$> listOfFoos)
, v2 = (v2 FooFuns) (v2 <$> listOfFoos)
}
Run Code Online (Sandbox Code Playgroud)

当前,我将该函数包装在值列表上,作为newtype(可以被Higgledy的使用HKD)和GADT用于Traversable约束,但是后一部分可能是不必要的,或者可能更好地建模为类型类:

data TraversableFun a t where
  TraversableFun :: Traversable t => (t a -> a) -> TraversableFun t a
newtype ListFun …
Run Code Online (Sandbox Code Playgroud)

haskell

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

即使仅将SemiGroup列为约束,为什么此函数仍隐含一个单调约束?

在下面的堆栈脚本中,我无法将strangeHeadMay函数应用于NonEmpty列表,但在常规列表上运行良好。

#!/usr/bin/env stack
{- stack script --nix --resolver lts-13.6 -}

{-# LANGUAGE ScopedTypeVariables  #-}
{-# LANGUAGE PartialTypeSignatures #-}
{-# OPTIONS_GHC -Wno-partial-type-signatures #-} -- hide some scary types

import           Control.Arrow                    ((&&&))
import           Control.Monad                    (join)
import           Data.Foldable                    (toList)
import           Data.Function                    ((&))
import           Data.Functor                     ((<&>))
import           Data.List.NonEmpty               (NonEmpty(..))
import qualified Data.List.NonEmpty               as LNE
import           Data.Maybe                       (catMaybes)
import           Data.Tuple.Sequence              (sequenceT)


strangeHeadMay :: forall a t. (Semigroup (t a), _) => t a -> Maybe a
strangeHeadMay xs =
  let xsWrapped …
Run Code Online (Sandbox Code Playgroud)

haskell

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

在 Scala 3 中,有没有办法在一个区域中禁用 -language:strictEquality(多元平等)?

想要这样做的特殊原因是仍然能够对来自超类的值使用模式匹配。例如,我希望case None在查看 type 的值时能够匹配Option[Throwable],但这似乎不可能,因为Throwable不可能,而且(我想)永远不会有CanEqual实例。

scala scala-3

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