我想在文本文件中使用词形还原:
surprise heard thump opened door small seedy man clasping package wrapped.
upgrading system found review spring 2008 issue moody audio backed.
omg left gotta wrap review order asap . understand hand delivered dali lama
speak hands wear earplugs lives . listen maintain link long .
cables cables finally able hear gem long rumored music .
...
Run Code Online (Sandbox Code Playgroud)
和预期产量是:
surprise heard thump open door small seed man clasp package wrap.
upgrade system found review spring 2008 issue mood audio back.
omg …Run Code Online (Sandbox Code Playgroud) 我在Databricks中使用Spark 2.1版.我有一个数据框wamp,我想要添加一个名为的列region,该列应该采用常量值NE.但是,NameError: name 'lit' is not defined当我运行以下命令时出现错误:
wamp = wamp.withColumn('region', lit('NE'))
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我正在尝试将数据从spark数据帧导出到.csv文件:
df.coalesce(1)\
.write\
.format("com.databricks.spark.csv")\
.option("header", "true")\
.save(output_path)
Run Code Online (Sandbox Code Playgroud)
它正在创建一个文件名"part-r-00001-512872f2-9b51-46c5-b0ee-31d626063571.csv"
我希望文件名为"part-r-00000.csv"或"part-00000.csv"
在AWS S3上创建文件时,我对如何使用os.system命令的限制.
如何在保留文件中的标题的同时设置文件名?
谢谢!
我正在尝试读取以 UTF-16 编码的 CSV 文件。
val test = spark.read
.format("com.databricks.spark.csv")
.option("header", "true")
.option("inferSchema", "true")
.option("delimiter",";")
.option("dateFormat", "yyyy-MM-dd HH:mm:ss.SSS")
.option("encoding", "UTF-16")
.option("charset", "ISO-8859-1")
.load("...")
Run Code Online (Sandbox Code Playgroud)
结果我得到了额外的行:
Spark 是否可能只能使用 UTF-8 编码?或者还有其他方法可以将 UTF-16 CSV 读入数据帧?
scala apache-spark apache-spark-sql spark-dataframe databricks
我想知道它有spark-redshift连接器的任何其他替代品.它似乎不再维护,因为此库自动包含在Spark 2.1.0-db2及更高版本的Databricks集群映像中.
我写这篇文章不是为了问问题,而是分享知识。我正在使用 Spark 连接到雪花。但我无法访问雪花。数据块中的内部 JDBC 驱动程序似乎有问题。
这是我得到的错误。
java.lang.NoClassDefFoundError:net/snowflake/client/jdbc/internal/snowflake/common/core/S3FileEncryptionMaterial
Run Code Online (Sandbox Code Playgroud)
我尝试了许多版本的雪花 jdbc 驱动程序和雪花驱动程序。好像我可以匹配到正确的。
apache-spark apache-spark-sql snowflake-cloud-data-platform databricks
该行:
df.withColumn("test", expr("concat(lon, lat)"))
Run Code Online (Sandbox Code Playgroud)
可以正常工作,但是
df.withColumn("test", expr("concat(lon, lit(','), lat)"))
Run Code Online (Sandbox Code Playgroud)
产生以下异常:
org.apache.spark.sql.AnalysisException:未定义的函数:'lit'。该功能既不是注册的临时功能,也不是在数据库“默认”中注册的永久功能。org.apache.spark.sql.catalyst.analysis.Analyzer $ LookupFunctions $$ anonfun $ apply $ 15 $ anonfun $ applyOrElse $ 49.apply(Analyzer.scala:1198)的第1行pos 12
为什么?解决方法是什么?
当尝试使用cast(TimestampType)将具有时区信息的ISO8601字符串转换为TimestampType时,仅接受时区格式为+01:00的字符串。如果以ISO8601合法方式+0100(不含冒号)定义了时区,则解析将失败并返回null。我需要在保留ms部分的同时将字符串转换为TimestampType。
2019-02-05T14:06:31.556+0100 Returns null
2019-02-05T14:06:31.556+01:00 Returns a correctly parsed TimestampType
Run Code Online (Sandbox Code Playgroud)
我试图使用to_timestamp()和unix_timestamp()。cast(TimestampType)函数。不幸的是,它们截断了我需要保留的时间戳的ms部分。另外,您需要将它们应用于新列,并且不能就地替换复杂类型中的属性(如果我在from_json函数的模式中将ApiReceived属性设为TimestampType,则可以这样做)。
df
.select($"body".cast(StringType))
.select(from_json($"body", schema).as("Payload"))
.select($"Payload.Metadata.ApiReceived".as("Time"))
.withColumn("NewTime", to_timestamp($"Time", "yyyy-MM-dd'T'HH:mm:ss.SSSZ"))
.withColumn("NewTime2", unix_timestamp($"Time", "yyyy-MM-dd'T'HH:mm:ss.SSSZ").cast(TimestampType))
.withColumn("NewTime3", $"Time".cast(TimestampType))
Run Code Online (Sandbox Code Playgroud)
上面的DataFrame的输出类型
df:org.apache.spark.sql.DataFrame
Time:string
NewTime:timestamp
NewTime2:timestamp
NewTime3:timestamp
Run Code Online (Sandbox Code Playgroud)
并输出值
Time 2019-02-05T14:06:31.556+0100
NewTime 2019-02-05 13:06:31
NewTime2 2019-02-05 13:06:31
NewTime3 null
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以使Spark在不依靠UDF:s的情况下处理转换?
更新资料
经过更彻底的调查后,我发现Sparks日期时间解析有些不一致。:)
val df = Seq(
//Extended format
("2019-02-05T14:06:31.556+01:00"),
("2019-02-05T14:06:31.556+01"),
("2019-02-05T14:06:31.556"),
//Basic Format
("20190205T140631556+0100"),
("20190205T140631556+01"),
("20190205T140631556"),
//Mixed extended with basic
("2019-02-05T14:06:31.556+0100"),
("20190205T140631556+01:00")
).toDF
val formatStrings = Seq(
("yyyy-MM-dd'T'HH:mm:ss.SSSZ"),
("yyyy-MM-dd'T'HH:mm:ss.SSSX"),
("yyyyMMdd'T'HHmmssSSSZ"),
("yyyyMMdd'T'HHmmssSSSX")
)
val format = formatStrings(0)
val df2 …Run Code Online (Sandbox Code Playgroud) 我正在使用 azure databricks 并尝试从此页面运行一些示例 python 代码:https ://spark.apache.org/docs/latest/ml-pipeline.html
并得到这个异常: py4j.security.Py4JSecurityException: Constructor public org.apache.spark.ml.classification.LogisticRegression(java.lang.String) 未列入白名单。
谢谢。立东
我正在使用Databricks Connect从IntelliJ IDEA(Scala)在本地Azure Databricks群集中运行代码。
一切正常。我可以在IDE中本地连接,调试和检查。
我创建了一个Databricks作业来运行我的自定义应用程序JAR,但由于以下异常而失败:
19/08/17 19:20:26 ERROR Uncaught throwable from user code: java.lang.NoClassDefFoundError: com/databricks/service/DBUtils$
at Main$.<init>(Main.scala:30)
at Main$.<clinit>(Main.scala)
Run Code Online (Sandbox Code Playgroud)
我的Main.scala类的第30行是
val dbutils: DBUtils.type = com.databricks.service.DBUtils
Run Code Online (Sandbox Code Playgroud)
就像本文档页面上的描述一样
该页面显示了一种访问在本地和群集中均可使用的DBUtil的方法。但是该示例仅显示了Python,而我正在使用Scala。
以既可以使用databricks-connect在本地工作又可以在运行JAR的Databricks作业中工作的方式访问它的正确方法是什么?
更新
似乎有两种使用DBUtils的方法。
1)这里描述的DbUtils类。引用文档,此库允许您构建和编译项目,但不能运行它。这不允许您在集群上运行本地代码。
2)此处描述了 Databricks Connect 。这使您可以在Databricks集群中运行本地Spark代码。
问题在于这两种方法具有不同的设置和程序包名称。似乎没有一种在本地使用Databricks Connect的方法(在群集中不可用),但是随后通过sbt / maven添加了使用DbUtils类的jar应用程序,以便群集可以访问它。
scala databricks azure-databricks databricks-connect dbutils
databricks ×10
apache-spark ×9
scala ×4
pyspark ×3
dbutils ×1
python ×1
snowflake-cloud-data-platform ×1
text ×1